fix: meory leak

This commit is contained in:
slzhou 2024-01-23 08:41:59 +08:00
parent cb41739c22
commit 6ca92a3d92
1 changed files with 9 additions and 4 deletions

View File

@ -1040,7 +1040,7 @@ static int32_t sortBlocksToExtSource(SSortHandle* pHandle, SArray* aBlk, SBlockO
return 0; 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 keepRows = pOrigBlk->info.rows;
int64_t nRows = 0; int64_t nRows = 0;
int64_t prevRows = 0; int64_t prevRows = 0;
@ -1061,8 +1061,9 @@ static SSDataBlock* getBlockWithinLimit(const SSortHandle* pHandle, SSHashObj* m
SSDataBlock* pBlock = NULL; SSDataBlock* pBlock = NULL;
if (keepRows != pOrigBlk->info.rows) { if (keepRows != pOrigBlk->info.rows) {
pBlock = blockDataExtractBlock(pOrigBlk, 0, keepRows); pBlock = blockDataExtractBlock(pOrigBlk, 0, keepRows);
*pExtractedBlock = true;
} else { } else {
pBlock = createOneDataBlock(pOrigBlk, true); *pExtractedBlock = false;
} }
return pBlock; return pBlock;
} }
@ -1096,8 +1097,9 @@ static int32_t createBlocksMergeSortInitialSources(SSortHandle* pHandle) {
SSDataBlock* pBlk = pHandle->fetchfp(pSrc->param); SSDataBlock* pBlk = pHandle->fetchfp(pSrc->param);
int64_t p = taosGetTimestampUs(); int64_t p = taosGetTimestampUs();
bool bExtractedBlock = false;
if (pBlk != NULL && pHandle->mergeLimit != -1) { if (pBlk != NULL && pHandle->mergeLimit != -1) {
pBlk = getBlockWithinLimit(pHandle, mTableNumRows, pBlk); pBlk = getRowsBlockWithinMergeLimit(pHandle, mTableNumRows, pBlk, &bExtractedBlock);
} }
if (pBlk != NULL) { if (pBlk != NULL) {
@ -1116,8 +1118,11 @@ static int32_t createBlocksMergeSortInitialSources(SSortHandle* pHandle) {
if (ppBlk != NULL) { if (ppBlk != NULL) {
SSDataBlock* tBlk = *(SSDataBlock**)(ppBlk); SSDataBlock* tBlk = *(SSDataBlock**)(ppBlk);
blockDataMerge(tBlk, pBlk); blockDataMerge(tBlk, pBlk);
if (bExtractedBlock) {
blockDataDestroy(pBlk);
}
} else { } 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); tSimpleHashPut(mUidBlk, &pBlk->info.id.uid, sizeof(pBlk->info.id.uid), &tBlk, POINTER_BYTES);
taosArrayPush(aBlkSort, &tBlk); taosArrayPush(aBlkSort, &tBlk);
} }