fix memory leak ERROR in slice alloc
This commit is contained in:
17
deps/oblib/src/lib/allocator/ob_slice_alloc.h
vendored
17
deps/oblib/src/lib/allocator/ob_slice_alloc.h
vendored
@ -288,18 +288,21 @@ public:
|
|||||||
blk_ref_[ObBlockSlicer::hash((uint64_t)old_blk) % MAX_REF_NUM].sync();
|
blk_ref_[ObBlockSlicer::hash((uint64_t)old_blk) % MAX_REF_NUM].sync();
|
||||||
if (old_blk->release()) {
|
if (old_blk->release()) {
|
||||||
blk_list_.add(&old_blk->dlink_);
|
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;
|
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_);
|
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;
|
tmallocator_ = NULL;
|
||||||
bsize_ = 0;
|
bsize_ = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user