diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 8f97aaf154..2181496635 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1976,6 +1976,7 @@ int32_t createOneDataBlock(const SSDataBlock* pDataBlock, bool copyData, SSDataB code = copyPkVal(&pDstBlock->info, &pDataBlock->info); if (code != TSDB_CODE_SUCCESS) { + blockDataDestroy(pDstBlock); uError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); return code; } @@ -1991,10 +1992,14 @@ int32_t createOneDataBlock(const SSDataBlock* pDataBlock, bool copyData, SSDataB SColumnInfoData* pDst = taosArrayGet(pDstBlock->pDataBlock, i); SColumnInfoData* pSrc = taosArrayGet(pDataBlock->pDataBlock, i); if (pDst == NULL) { + blockDataDestroy(pDstBlock); + uError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); return terrno; } if (pSrc == NULL) { + blockDataDestroy(pDstBlock); + uError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); return terrno; } diff --git a/source/libs/executor/src/exchangeoperator.c b/source/libs/executor/src/exchangeoperator.c index bdc1e42b28..d8cced2c7a 100644 --- a/source/libs/executor/src/exchangeoperator.c +++ b/source/libs/executor/src/exchangeoperator.c @@ -850,6 +850,7 @@ int32_t doExtractResultBlocks(SExchangeInfo* pExchangeInfo, SSourceDataInfo* pDa int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SRetrieveTableRsp* pRetrieveRsp = pDataInfo->pRsp; + SSDataBlock* pb = NULL; char* pNextStart = pRetrieveRsp->data; char* pStart = pNextStart; @@ -874,7 +875,6 @@ int32_t doExtractResultBlocks(SExchangeInfo* pExchangeInfo, SSourceDataInfo* pDa } while (index++ < pRetrieveRsp->numOfBlocks) { - SSDataBlock* pb = NULL; pStart = pNextStart; if (taosArrayGetSize(pExchangeInfo->pRecycledBlocks) > 0) { @@ -902,15 +902,17 @@ int32_t doExtractResultBlocks(SExchangeInfo* pExchangeInfo, SSourceDataInfo* pDa code = extractDataBlockFromFetchRsp(pb, pStart, NULL, &pStart); if (code != 0) { taosMemoryFreeClear(pDataInfo->pRsp); - return code; + goto _end; } void* tmp = taosArrayPush(pExchangeInfo->pResultBlockList, &pb); QUERY_CHECK_NULL(tmp, code, lino, _end, terrno); + pb = NULL; } _end: if (code != TSDB_CODE_SUCCESS) { + blockDataDestroy(pb); qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } return code; diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 210c073c6d..24eafe7d57 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1942,6 +1942,8 @@ int32_t createExprInfo(SNodeList* pNodeList, SNodeList* pGroupKeys, SExprInfo** pTargetNode = (STargetNode*)nodesListGetNode(pGroupKeys, i - numOfFuncs); } if (!pTargetNode) { + destroyExprInfo(pExprs, *numOfExprs); + taosMemoryFreeClear(pExprs); qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(terrno)); return terrno; } @@ -1950,6 +1952,7 @@ int32_t createExprInfo(SNodeList* pNodeList, SNodeList* pGroupKeys, SExprInfo** code = createExprFromTargetNode(pExp, pTargetNode); if (code != TSDB_CODE_SUCCESS) { destroyExprInfo(pExprs, *numOfExprs); + taosMemoryFreeClear(pExprs); qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); return code; } diff --git a/source/libs/executor/src/sysscanoperator.c b/source/libs/executor/src/sysscanoperator.c index a2cfedd16e..d8a2331980 100644 --- a/source/libs/executor/src/sysscanoperator.c +++ b/source/libs/executor/src/sysscanoperator.c @@ -1670,6 +1670,7 @@ static SSDataBlock* sysTableBuildUserTables(SOperatorInfo* pOperator) { pAPI->metaReaderFn.clearReader(&mr); pAPI->metaFn.closeTableMetaCursor(pInfo->pCur); pInfo->pCur = NULL; + blockDataDestroy(p); T_LONG_JMP(pTaskInfo->env, terrno); } @@ -1829,6 +1830,8 @@ _end: qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); blockDataDestroy(p); pTaskInfo->code = code; + pAPI->metaFn.closeTableMetaCursor(pInfo->pCur); + pInfo->pCur = NULL; T_LONG_JMP(pTaskInfo->env, code); } return (pInfo->pRes->info.rows == 0) ? NULL : pInfo->pRes;