From 0c7f39ac50fd9cf64a69f26003e96e37308da93d Mon Sep 17 00:00:00 2001 From: nroskill Date: Thu, 3 Nov 2022 06:36:42 +0000 Subject: [PATCH] fix memory leak ERROR in slice alloc --- deps/oblib/src/lib/allocator/ob_slice_alloc.h | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/deps/oblib/src/lib/allocator/ob_slice_alloc.h b/deps/oblib/src/lib/allocator/ob_slice_alloc.h index 6c0ebfad8c..d5d161ddd4 100644 --- a/deps/oblib/src/lib/allocator/ob_slice_alloc.h +++ b/deps/oblib/src/lib/allocator/ob_slice_alloc.h @@ -288,18 +288,21 @@ public: blk_ref_[ObBlockSlicer::hash((uint64_t)old_blk) % MAX_REF_NUM].sync(); if (old_blk->release()) { blk_list_.add(&old_blk->dlink_); - if (old_blk->recycle()) { - destroy_block(old_blk); - } else { - _LIB_LOG(ERROR, "there was memory leak, stock=%d, remain=%d", old_blk->stock(), old_blk->remain()); - } } } } ObDLink* dlink = nullptr; - if (OB_NOT_NULL(dlink = blk_list_.top())) { + dlink = blk_list_.top(); + while (OB_NOT_NULL(dlink)) { Block* blk = CONTAINER_OF(dlink, Block, dlink_); - _LIB_LOG(ERROR, "there was memory leak, stock=%d, remain=%d", blk->stock(), blk->remain()); + if (blk->recycle()) { + destroy_block(blk); + dlink = blk_list_.top(); + } else { + _LIB_LOG(ERROR, "there was memory leak, stock=%d, total=%d, remain=%d" + , blk->stock(), blk->total(), blk->remain()); + dlink = nullptr; // break + } } tmallocator_ = NULL; bsize_ = 0; -- GitLab