From 6ca92a3d925ec5f364969b4c2df0f5f2cb5b22ed Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 23 Jan 2024 08:41:59 +0800 Subject: [PATCH] fix: meory leak --- source/libs/executor/src/tsort.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/source/libs/executor/src/tsort.c b/source/libs/executor/src/tsort.c index 24df12d06b..3e8d1628aa 100644 --- a/source/libs/executor/src/tsort.c +++ b/source/libs/executor/src/tsort.c @@ -1040,7 +1040,7 @@ static int32_t sortBlocksToExtSource(SSortHandle* pHandle, SArray* aBlk, SBlockO return 0; } -static SSDataBlock* getBlockWithinLimit(const SSortHandle* pHandle, SSHashObj* mTableNumRows, SSDataBlock* pOrigBlk) { +static SSDataBlock* getRowsBlockWithinMergeLimit(const SSortHandle* pHandle, SSHashObj* mTableNumRows, SSDataBlock* pOrigBlk, bool* pExtractedBlock) { int64_t keepRows = pOrigBlk->info.rows; int64_t nRows = 0; int64_t prevRows = 0; @@ -1061,8 +1061,9 @@ static SSDataBlock* getBlockWithinLimit(const SSortHandle* pHandle, SSHashObj* m SSDataBlock* pBlock = NULL; if (keepRows != pOrigBlk->info.rows) { pBlock = blockDataExtractBlock(pOrigBlk, 0, keepRows); + *pExtractedBlock = true; } else { - pBlock = createOneDataBlock(pOrigBlk, true); + *pExtractedBlock = false; } return pBlock; } @@ -1096,8 +1097,9 @@ static int32_t createBlocksMergeSortInitialSources(SSortHandle* pHandle) { SSDataBlock* pBlk = pHandle->fetchfp(pSrc->param); int64_t p = taosGetTimestampUs(); + bool bExtractedBlock = false; if (pBlk != NULL && pHandle->mergeLimit != -1) { - pBlk = getBlockWithinLimit(pHandle, mTableNumRows, pBlk); + pBlk = getRowsBlockWithinMergeLimit(pHandle, mTableNumRows, pBlk, &bExtractedBlock); } if (pBlk != NULL) { @@ -1116,8 +1118,11 @@ static int32_t createBlocksMergeSortInitialSources(SSortHandle* pHandle) { if (ppBlk != NULL) { SSDataBlock* tBlk = *(SSDataBlock**)(ppBlk); blockDataMerge(tBlk, pBlk); + if (bExtractedBlock) { + blockDataDestroy(pBlk); + } } else { - SSDataBlock* tBlk = createOneDataBlock(pBlk, true); + SSDataBlock* tBlk = (bExtractedBlock) ? pBlk : createOneDataBlock(pBlk, true); tSimpleHashPut(mUidBlk, &pBlk->info.id.uid, sizeof(pBlk->info.id.uid), &tBlk, POINTER_BYTES); taosArrayPush(aBlkSort, &tBlk); }