From 6d7912003d1be5f51d903bd30765cd710f40c455 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 19 Jul 2023 11:34:44 +0800 Subject: [PATCH] fix: block data memory issue --- source/libs/executor/src/groupcacheoperator.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source/libs/executor/src/groupcacheoperator.c b/source/libs/executor/src/groupcacheoperator.c index c6a01db880..ae09edd951 100755 --- a/source/libs/executor/src/groupcacheoperator.c +++ b/source/libs/executor/src/groupcacheoperator.c @@ -135,6 +135,21 @@ static int32_t addBlkToBufCache(struct SOperatorInfo* pOperator, SSDataBlock* pB return code; } +void blockDataDeepCleanup(SSDataBlock* pDataBlock) { + size_t numOfCols = taosArrayGetSize(pDataBlock->pDataBlock); + for (int32_t i = 0; i < numOfCols; ++i) { + SColumnInfoData* p = taosArrayGet(pDataBlock->pDataBlock, i); + p->pData = NULL; + if (IS_VAR_DATA_TYPE(p->info.type)) { + p->varmeta.offset = NULL; + p->varmeta.length = 0; + p->varmeta.allocLen = 0; + } else { + p->nullbitmap = NULL; + } + } + pDataBlock->info.capacity = 0; +} static int32_t buildGroupCacheBaseBlock(SSDataBlock** ppDst, SSDataBlock* pSrc) { *ppDst = taosMemoryMalloc(sizeof(*pSrc)); @@ -147,6 +162,7 @@ static int32_t buildGroupCacheBaseBlock(SSDataBlock** ppDst, SSDataBlock* pSrc) taosMemoryFree(*ppDst); return TSDB_CODE_OUT_OF_MEMORY; } + blockDataDeepCleanup(*ppDst); memcpy(&(*ppDst)->info, &pSrc->info, sizeof(pSrc->info)); return TSDB_CODE_SUCCESS; } @@ -164,6 +180,7 @@ static int32_t acquireBaseBlockFromList(SGcDownstreamCtx* pCtx, SSDataBlock** pp } static void releaseBaseBlockToList(SGcDownstreamCtx* pCtx, SSDataBlock* pBlock) { + blockDataDeepCleanup(pBlock); taosWLockLatch(&pCtx->blkLock); taosArrayPush(pCtx->pFreeBlock, &pBlock); taosWUnLockLatch(&pCtx->blkLock);