diff --git a/deps/oblib/src/lib/allocator/ob_slice_alloc.h b/deps/oblib/src/lib/allocator/ob_slice_alloc.h index 6c0ebfad8c0fb6270e96e6c464c5ca919a30def7..d5d161ddd43278ea0a31ba6dc5710437ceeae914 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;