fix: block data memory issue

This commit is contained in:
dapan1121 2023-07-19 11:34:44 +08:00
parent c45359c989
commit 6d7912003d
1 changed files with 17 additions and 0 deletions

View File

@ -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);