From b59bda18f86767a4a85219b23839d28bbfb6913c Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Wed, 17 Nov 2021 15:31:03 +0800 Subject: [PATCH] more --- source/dnode/vnode/impl/src/vnodeBufferPool.c | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/source/dnode/vnode/impl/src/vnodeBufferPool.c b/source/dnode/vnode/impl/src/vnodeBufferPool.c index 07dc56db95..daba6a9aac 100644 --- a/source/dnode/vnode/impl/src/vnodeBufferPool.c +++ b/source/dnode/vnode/impl/src/vnodeBufferPool.c @@ -277,4 +277,27 @@ static SMemAllocator *vBufPoolCreateMA(SMemAllocatorFactory *pmaf) { } static void vBufPoolDestroyMA(SMemAllocatorFactory *pmaf, SMemAllocator *pma) { /* TODO */ + SVnode * pVnode = (SVnode *)(pmaf->impl); + SListNode * pNode = ((SVMAWrapper *)(pma->impl))->pNode; + SVMemAllocator *pvma = (SVMemAllocator *)(pNode->data); + + if (T_REF_DEC(pvma) == 0) { + if (pvma->type == E_V_ARENA_ALLOCATOR) { + SVArenaAllocator *pvaa = &(pvma->vaa); + while (pvaa->inuse != &(pvaa->node)) { + SVArenaNode *pNode = pvaa->inuse; + pvaa->inuse = pNode->prev; + /* code */ + } + + pvaa->inuse->ptr = pvaa->inuse->data; + } else if (pvma->type == E_V_HEAP_ALLOCATOR) { + } else { + ASSERT(0); + } + + // Move node from incycle to free + tdListAppendNode(&(pVnode->pBufPool->free), tdListPopNode(&(pVnode->pBufPool->incycle), pNode)); + // tsem_post(); todo: sem_post + } } \ No newline at end of file