refactor:fix memory leak

This commit is contained in:
wangmm0220 2022-05-14 22:15:55 +08:00
parent d647827339
commit 98a2d311b7
4 changed files with 27 additions and 11 deletions

View File

@ -885,7 +885,7 @@ static int32_t smlParseInfluxString(const char* sql, SSmlLineInfo *elements, SSm
// parse measure // parse measure
while (*sql != '\0') { while (*sql != '\0') {
if(IS_SLASH_LETTER(sql)){ if((sql != elements->measure) && IS_SLASH_LETTER(sql)){
MOVE_FORWARD_ONE(sql,strlen(sql) + 1); MOVE_FORWARD_ONE(sql,strlen(sql) + 1);
continue; continue;
} }
@ -973,6 +973,8 @@ static int32_t smlParseTelnetTags(const char* data, SArray *cols, SHashObj *dump
const char *sql = data; const char *sql = data;
while(*sql != '\0'){ while(*sql != '\0'){
JUMP_SPACE(sql) JUMP_SPACE(sql)
if(*sql == '\0') break;
const char *key = sql; const char *key = sql;
int32_t keyLen = 0; int32_t keyLen = 0;
@ -1005,6 +1007,8 @@ static int32_t smlParseTelnetTags(const char* data, SArray *cols, SHashObj *dump
while(*sql != '\0') { while(*sql != '\0') {
// parse value // parse value
if (*sql == SPACE) { if (*sql == SPACE) {
valueLen = sql - value;
sql++;
break; break;
} }
if (*sql == EQUAL) { if (*sql == EQUAL) {
@ -1013,14 +1017,15 @@ static int32_t smlParseTelnetTags(const char* data, SArray *cols, SHashObj *dump
} }
sql++; sql++;
} }
valueLen = sql - value; if(valueLen == 0){
sql++; valueLen = sql - value;
JUMP_SPACE(sql) }
if(valueLen == 0){ if(valueLen == 0){
smlBuildInvalidDataMsg(msg, "invalid value", value); smlBuildInvalidDataMsg(msg, "invalid value", value);
return TSDB_CODE_SML_INVALID_DATA; return TSDB_CODE_SML_INVALID_DATA;
} }
// add kv to SSmlKv // add kv to SSmlKv
SSmlKv *kv = (SSmlKv *)taosMemoryCalloc(sizeof(SSmlKv), 1); SSmlKv *kv = (SSmlKv *)taosMemoryCalloc(sizeof(SSmlKv), 1);
if(!kv) return TSDB_CODE_OUT_OF_MEMORY; if(!kv) return TSDB_CODE_OUT_OF_MEMORY;
@ -1354,6 +1359,7 @@ static void smlDestroySTableMeta(SSmlSTableMeta *meta){
taosArrayDestroy(meta->tags); taosArrayDestroy(meta->tags);
taosArrayDestroy(meta->cols); taosArrayDestroy(meta->cols);
taosMemoryFree(meta->tableMeta); taosMemoryFree(meta->tableMeta);
taosMemoryFree(meta);
} }
static void smlDestroyCols(SArray *cols) { static void smlDestroyCols(SArray *cols) {

View File

@ -206,10 +206,16 @@ TEST(testCase, smlParseCols_Error_Test) {
int32_t len = strlen(data[i]); int32_t len = strlen(data[i]);
char *sql = (char*)taosMemoryCalloc(256, 1); char *sql = (char*)taosMemoryCalloc(256, 1);
memcpy(sql, data[i], len + 1); memcpy(sql, data[i], len + 1);
int32_t ret = smlParseCols(sql, len, NULL, false, dumplicateKey, &msgBuf); SArray *cols = taosArrayInit(8, POINTER_BYTES);
int32_t ret = smlParseCols(sql, len, cols, false, dumplicateKey, &msgBuf);
ASSERT_NE(ret, TSDB_CODE_SUCCESS); ASSERT_NE(ret, TSDB_CODE_SUCCESS);
taosHashClear(dumplicateKey); taosHashClear(dumplicateKey);
taosMemoryFree(sql); taosMemoryFree(sql);
for(int j = 0; j < taosArrayGetSize(cols); j++){
void *kv = taosArrayGetP(cols, j);
taosMemoryFree(kv);
}
taosArrayDestroy(cols);
} }
taosHashCleanup(dumplicateKey); taosHashCleanup(dumplicateKey);
} }
@ -239,7 +245,6 @@ TEST(testCase, smlParseCols_tag_Test) {
ASSERT_EQ(kv->type, TSDB_DATA_TYPE_NCHAR); ASSERT_EQ(kv->type, TSDB_DATA_TYPE_NCHAR);
ASSERT_EQ(kv->length, 15); ASSERT_EQ(kv->length, 15);
ASSERT_EQ(strncasecmp(kv->value, "\"passit", 7), 0); ASSERT_EQ(strncasecmp(kv->value, "\"passit", 7), 0);
taosMemoryFree(kv);
// nchar // nchar
kv = (SSmlKv *)taosArrayGetP(cols, 3); kv = (SSmlKv *)taosArrayGetP(cols, 3);
@ -248,11 +253,13 @@ TEST(testCase, smlParseCols_tag_Test) {
ASSERT_EQ(kv->type, TSDB_DATA_TYPE_NCHAR); ASSERT_EQ(kv->type, TSDB_DATA_TYPE_NCHAR);
ASSERT_EQ(kv->length, 7); ASSERT_EQ(kv->length, 7);
ASSERT_EQ(strncasecmp(kv->value, "4.31f64", 7), 0); ASSERT_EQ(strncasecmp(kv->value, "4.31f64", 7), 0);
taosMemoryFree(kv);
for(int i = 0; i < size; i++){
void *tmp = taosArrayGetP(cols, i);
taosMemoryFree(tmp);
}
taosArrayClear(cols); taosArrayClear(cols);
// test tag is null // test tag is null
data = "t=3e"; data = "t=3e";
len = 0; len = 0;

View File

@ -1826,6 +1826,9 @@ void smlDestroyHandle(void* pHandle) {
if (!pHandle) return; if (!pHandle) return;
SSmlExecHandle* handle = (SSmlExecHandle*)pHandle; SSmlExecHandle* handle = (SSmlExecHandle*)pHandle;
destroyBlockHashmap(handle->pBlockHash); destroyBlockHashmap(handle->pBlockHash);
tdDestroyKVRowBuilder(&handle->tagsBuilder);
destroyBoundColumnInfo(&handle->tags);
destroyCreateSubTbReq(&handle->createTblReq);
taosMemoryFree(handle); taosMemoryFree(handle);
} }

View File

@ -237,9 +237,9 @@ static void destroyDataBlock(STableDataBlocks* pDataBlock) {
taosMemoryFreeClear(pDataBlock->pData); taosMemoryFreeClear(pDataBlock->pData);
if (!pDataBlock->cloned) { if (!pDataBlock->cloned) {
// free the refcount for metermeta // free the refcount for metermeta
// if (pDataBlock->pTableMeta != NULL) { if (pDataBlock->pTableMeta != NULL) {
// taosMemoryFreeClear(pDataBlock->pTableMeta); taosMemoryFreeClear(pDataBlock->pTableMeta);
// } }
destroyBoundColumnInfo(&pDataBlock->boundColumnInfo); destroyBoundColumnInfo(&pDataBlock->boundColumnInfo);
} }