refactor:fix memory leak
This commit is contained in:
parent
d647827339
commit
98a2d311b7
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue