[td-13039] fix memory leak and invlad memory operations.

This commit is contained in:
Haojun Liao 2022-03-26 22:46:12 +08:00
parent 36faa27dac
commit 66b47472f0
4 changed files with 28 additions and 22 deletions

View File

@ -43,7 +43,7 @@ typedef struct SScalarCtx {
#define SCL_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; } return _code; } while (0) #define SCL_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; } return _code; } while (0)
#define SCL_ERR_JRET(c) do { code = c; if (code != TSDB_CODE_SUCCESS) { terrno = code; goto _return; } } while (0) #define SCL_ERR_JRET(c) do { code = c; if (code != TSDB_CODE_SUCCESS) { terrno = code; goto _return; } } while (0)
int32_t doConvertDataType(SScalarParam* in, SScalarParam* out, SValueNode* pValueNode); int32_t doConvertDataType(SValueNode* pValueNode, SScalarParam* out);
SColumnInfoData* createColumnInfoData(SDataType* pType, int32_t numOfRows); SColumnInfoData* createColumnInfoData(SDataType* pType, int32_t numOfRows);
//int32_t sclMoveParamListData(SScalarParam *params, int32_t listNum, int32_t idx); //int32_t sclMoveParamListData(SScalarParam *params, int32_t listNum, int32_t idx);

View File

@ -1022,12 +1022,12 @@ int32_t fltAddGroupUnitFromNode(SFilterInfo *info, SNode* tree, SArray *group) {
SNodeListNode *listNode = (SNodeListNode *)node->pRight; SNodeListNode *listNode = (SNodeListNode *)node->pRight;
SListCell *cell = listNode->pNodeList->pHead; SListCell *cell = listNode->pNodeList->pHead;
SScalarParam in = {.columnData = calloc(1, sizeof(SColumnInfoData))}, out = {.columnData = calloc(1, sizeof(SColumnInfoData))}; SScalarParam out = {.columnData = calloc(1, sizeof(SColumnInfoData))};
out.columnData->info.type = type; out.columnData->info.type = type;
for (int32_t i = 0; i < listNode->pNodeList->length; ++i) { for (int32_t i = 0; i < listNode->pNodeList->length; ++i) {
SValueNode *valueNode = (SValueNode *)cell->pNode; SValueNode *valueNode = (SValueNode *)cell->pNode;
code = doConvertDataType(&in, &out, valueNode); code = doConvertDataType(valueNode, &out);
if (code) { if (code) {
// fltError("convert from %d to %d failed", in.type, out.type); // fltError("convert from %d to %d failed", in.type, out.type);
FLT_ERR_RET(code); FLT_ERR_RET(code);
@ -1791,12 +1791,11 @@ int32_t fltInitValFieldData(SFilterInfo *info) {
if (dType->type == type) { if (dType->type == type) {
assignVal(fi->data, nodesGetValueFromNode(var), dType->bytes, type); assignVal(fi->data, nodesGetValueFromNode(var), dType->bytes, type);
} else { } else {
SScalarParam in = {.columnData = calloc(1, sizeof(SColumnInfoData))};
SScalarParam out = {.columnData = calloc(1, sizeof(SColumnInfoData))}; SScalarParam out = {.columnData = calloc(1, sizeof(SColumnInfoData))};
out.columnData->info.type = type; out.columnData->info.type = type;
// todo refactor the convert // todo refactor the convert
int32_t code = doConvertDataType(&in, &out, var); int32_t code = doConvertDataType(var, &out);
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
qError("convert value to type[%d] failed", type); qError("convert value to type[%d] failed", type);
return TSDB_CODE_TSC_INVALID_OPERATION; return TSDB_CODE_TSC_INVALID_OPERATION;

View File

@ -38,13 +38,17 @@ SColumnInfoData* createColumnInfoData(SDataType* pType, int32_t numOfRows) {
} }
} }
int32_t doConvertDataType(SScalarParam* in, SScalarParam* out, SValueNode* pValueNode) { int32_t doConvertDataType(SValueNode* pValueNode, SScalarParam* out) {
in->columnData = createColumnInfoData(&pValueNode->node.resType, 1); SScalarParam in = {.numOfRows = 1};
colDataAppend(in->columnData, 0, nodesGetValueFromNode(pValueNode), false); in.columnData = createColumnInfoData(&pValueNode->node.resType, 1);
in->numOfRows = 1; colDataAppend(in.columnData, 0, nodesGetValueFromNode(pValueNode), false);
blockDataEnsureColumnCapacity(out->columnData, 1); blockDataEnsureColumnCapacity(out->columnData, 1);
return vectorConvertImpl(in, out);
int32_t code = vectorConvertImpl(&in, out);
sclFreeParam(&in);
return code;
} }
int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) { int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
@ -60,7 +64,7 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
SNodeListNode *nodeList = (SNodeListNode *)pNode; SNodeListNode *nodeList = (SNodeListNode *)pNode;
SListCell *cell = nodeList->pNodeList->pHead; SListCell *cell = nodeList->pNodeList->pHead;
SScalarParam in = {.columnData = calloc(1, sizeof(SColumnInfoData))}, out = {.columnData = calloc(1, sizeof(SColumnInfoData))}; SScalarParam out = {.columnData = calloc(1, sizeof(SColumnInfoData))};
int32_t len = 0; int32_t len = 0;
void *buf = NULL; void *buf = NULL;
@ -72,8 +76,8 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
out.columnData->info.type = type; out.columnData->info.type = type;
out.columnData->info.bytes = tDataTypes[type].bytes; out.columnData->info.bytes = tDataTypes[type].bytes;
doConvertDataType(&in, &out, valueNode); code = doConvertDataType(valueNode, &out);
if (code) { if (code != TSDB_CODE_SUCCESS) {
// sclError("convert data from %d to %d failed", in.type, out.type); // sclError("convert data from %d to %d failed", in.type, out.type);
SCL_ERR_JRET(code); SCL_ERR_JRET(code);
} }
@ -104,6 +108,7 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
} }
*data = pObj; *data = pObj;
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
_return: _return:
@ -131,13 +136,15 @@ void sclFreeParamNoData(SScalarParam *param) {
void sclFreeParam(SScalarParam *param) { void sclFreeParam(SScalarParam *param) {
sclFreeParamNoData(param); sclFreeParamNoData(param);
// if (!param->dataInBlock) {
// if (SCL_DATA_TYPE_DUMMY_HASH == param->type) { if (param->columnData != NULL) {
// taosHashCleanup((SHashObj *)param->orig.data); colDataDestroy(param->columnData);
// } else { tfree(param->columnData);
// tfree(param->orig.data); }
// }
// } if (param->pHashFilter != NULL) {
taosHashCleanup(param->pHashFilter);
}
} }
int32_t sclCopyValueNodeValue(SValueNode *pNode, void **res) { int32_t sclCopyValueNodeValue(SValueNode *pNode, void **res) {
@ -413,7 +420,7 @@ int32_t sclExecOperator(SOperatorNode *node, SScalarCtx *ctx, SScalarParam *outp
_return: _return:
for (int32_t i = 0; i < paramNum; ++i) { for (int32_t i = 0; i < paramNum; ++i) {
sclFreeParamNoData(params + i); // sclFreeParam(&params[i]);
} }
tfree(params); tfree(params);

View File

@ -1270,7 +1270,7 @@ TEST(columnTest, binary_column_is_true) {
} }
int32_t rowNum = sizeof(leftv)/sizeof(leftv[0]); int32_t rowNum = sizeof(leftv)/sizeof(leftv[0]);
scltMakeColumnNode(&pLeft, &src, TSDB_DATA_TYPE_BINARY, 3, rowNum, leftv); scltMakeColumnNode(&pLeft, &src, TSDB_DATA_TYPE_BINARY, 5, rowNum, leftv);
scltMakeOpNode(&opNode, OP_TYPE_IS_TRUE, TSDB_DATA_TYPE_BOOL, pLeft, NULL); scltMakeOpNode(&opNode, OP_TYPE_IS_TRUE, TSDB_DATA_TYPE_BOOL, pLeft, NULL);