Merge pull request #27699 from taosdata/fix/3.0/TD-31914
fix:[TD-31914] Fix mem leak when error occurs.
This commit is contained in:
commit
b92dcea9fb
|
@ -1274,6 +1274,16 @@ int32_t filterAddUnitToGroup(SFilterGroup *group, uint32_t unitIdx) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void filterFreeGroup(void *pItem) {
|
||||||
|
if (pItem == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SFilterGroup *p = (SFilterGroup *)pItem;
|
||||||
|
taosMemoryFreeClear(p->unitIdxs);
|
||||||
|
taosMemoryFreeClear(p->unitFlags);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t fltAddGroupUnitFromNode(SFilterInfo *info, SNode *tree, SArray *group) {
|
int32_t fltAddGroupUnitFromNode(SFilterInfo *info, SNode *tree, SArray *group) {
|
||||||
SOperatorNode *node = (SOperatorNode *)tree;
|
SOperatorNode *node = (SOperatorNode *)tree;
|
||||||
int32_t ret = TSDB_CODE_SUCCESS;
|
int32_t ret = TSDB_CODE_SUCCESS;
|
||||||
|
@ -1336,9 +1346,11 @@ int32_t fltAddGroupUnitFromNode(SFilterInfo *info, SNode *tree, SArray *group) {
|
||||||
SFilterGroup fgroup = {0};
|
SFilterGroup fgroup = {0};
|
||||||
code = filterAddUnitToGroup(&fgroup, uidx);
|
code = filterAddUnitToGroup(&fgroup, uidx);
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
filterFreeGroup((void*)&fgroup);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (NULL == taosArrayPush(group, &fgroup)) {
|
if (NULL == taosArrayPush(group, &fgroup)) {
|
||||||
|
filterFreeGroup((void*)&fgroup);
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1658,16 +1670,6 @@ int32_t filterAddGroupUnitFromCtx(SFilterInfo *dst, SFilterInfo *src, SFilterRan
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void filterFreeGroup(void *pItem) {
|
|
||||||
if (pItem == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SFilterGroup *p = (SFilterGroup *)pItem;
|
|
||||||
taosMemoryFreeClear(p->unitIdxs);
|
|
||||||
taosMemoryFreeClear(p->unitFlags);
|
|
||||||
}
|
|
||||||
|
|
||||||
EDealRes fltTreeToGroup(SNode *pNode, void *pContext) {
|
EDealRes fltTreeToGroup(SNode *pNode, void *pContext) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
SArray *preGroup = NULL;
|
SArray *preGroup = NULL;
|
||||||
|
@ -2944,25 +2946,44 @@ int32_t filterRewrite(SFilterInfo *info, SFilterGroupCtx **gRes, int32_t gResNum
|
||||||
for (int32_t n = 0; n < usize; ++n) {
|
for (int32_t n = 0; n < usize; ++n) {
|
||||||
SFilterUnit *u = (SFilterUnit *)taosArrayGetP((SArray *)colInfo->info, n);
|
SFilterUnit *u = (SFilterUnit *)taosArrayGetP((SArray *)colInfo->info, n);
|
||||||
if (NULL == u) {
|
if (NULL == u) {
|
||||||
FLT_ERR_JRET(TSDB_CODE_OUT_OF_RANGE);
|
code = TSDB_CODE_OUT_OF_RANGE;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
FLT_ERR_JRET(filterAddUnitFromUnit(info, &oinfo, u, &uidx));
|
code = filterAddUnitFromUnit(info, &oinfo, u, &uidx);
|
||||||
FLT_ERR_JRET(filterAddUnitToGroup(&ng, uidx));
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
code = filterAddUnitToGroup(&ng, uidx);
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
filterFreeGroup((void*)&ng);
|
||||||
|
FLT_ERR_JRET(code);
|
||||||
|
}
|
||||||
|
|
||||||
if (colInfo->type != RANGE_TYPE_MR_CTX) {
|
if (colInfo->type != RANGE_TYPE_MR_CTX) {
|
||||||
fltError("filterRewrite get invalid col type : %d", colInfo->type);
|
fltError("filterRewrite get invalid col type : %d", colInfo->type);
|
||||||
FLT_ERR_JRET(TSDB_CODE_QRY_FILTER_INVALID_TYPE);
|
FLT_ERR_JRET(TSDB_CODE_QRY_FILTER_INVALID_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
FLT_ERR_JRET(filterAddGroupUnitFromCtx(info, &oinfo, colInfo->info, res->colIdx[m], &ng, optr, group));
|
code = filterAddGroupUnitFromCtx(info, &oinfo, colInfo->info, res->colIdx[m], &ng, optr, group);
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
filterFreeGroup((void*)&ng);
|
||||||
|
FLT_ERR_JRET(code);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ng.unitNum > 0) {
|
if (ng.unitNum > 0) {
|
||||||
if (NULL == taosArrayPush(group, &ng)) {
|
if (NULL == taosArrayPush(group, &ng)) {
|
||||||
|
filterFreeGroup((void*)&ng);
|
||||||
FLT_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY);
|
FLT_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue