fix dead_lock when create_sub_mgr
This commit is contained in:
18
deps/oblib/src/lib/alloc/object_mgr.cpp
vendored
18
deps/oblib/src/lib/alloc/object_mgr.cpp
vendored
@ -239,15 +239,27 @@ SubObjectMgr *ObjectMgr::create_sub_mgr()
|
|||||||
SubObjectMgr *sub_mgr = nullptr;
|
SubObjectMgr *sub_mgr = nullptr;
|
||||||
auto ta = ObMallocAllocator::get_instance()->get_tenant_ctx_allocator(OB_SERVER_TENANT_ID,
|
auto ta = ObMallocAllocator::get_instance()->get_tenant_ctx_allocator(OB_SERVER_TENANT_ID,
|
||||||
ObCtxIds::DEFAULT_CTX_ID);
|
ObCtxIds::DEFAULT_CTX_ID);
|
||||||
auto &root_mgr = static_cast<ObjectMgr&>(ta->get_block_mgr()).root_mgr_;
|
|
||||||
ObMemAttr attr;
|
ObMemAttr attr;
|
||||||
attr.tenant_id_ = OB_SERVER_TENANT_ID;
|
attr.tenant_id_ = OB_SERVER_TENANT_ID;
|
||||||
attr.label_ = common::ObModIds::OB_TENANT_CTX_ALLOCATOR;
|
attr.label_ = common::ObModIds::OB_TENANT_CTX_ALLOCATOR;
|
||||||
attr.ctx_id_ = ObCtxIds::DEFAULT_CTX_ID;
|
attr.ctx_id_ = ObCtxIds::DEFAULT_CTX_ID;
|
||||||
attr.ignore_version_ = true;
|
attr.ignore_version_ = true;
|
||||||
root_mgr.lock();
|
class SubObjectMgrWrapper {
|
||||||
|
public:
|
||||||
|
SubObjectMgrWrapper(SubObjectMgr& sub_mgr)
|
||||||
|
: sub_mgr_(sub_mgr)
|
||||||
|
{}
|
||||||
|
AObject *realloc_object(AObject *obj, const uint64_t size, const ObMemAttr &attr)
|
||||||
|
{
|
||||||
|
sub_mgr_.lock();
|
||||||
|
AObject *new_obj = sub_mgr_.realloc_object(obj, size, attr);
|
||||||
|
sub_mgr_.unlock();
|
||||||
|
return new_obj;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
SubObjectMgr& sub_mgr_;
|
||||||
|
} root_mgr(static_cast<ObjectMgr&>(ta->get_block_mgr()).root_mgr_);
|
||||||
void *ptr = ObTenantCtxAllocator::common_realloc(NULL, sizeof(SubObjectMgr), attr, *(ta.ref_allocator()), root_mgr);
|
void *ptr = ObTenantCtxAllocator::common_realloc(NULL, sizeof(SubObjectMgr), attr, *(ta.ref_allocator()), root_mgr);
|
||||||
root_mgr.unlock();
|
|
||||||
if (OB_NOT_NULL(ptr)) {
|
if (OB_NOT_NULL(ptr)) {
|
||||||
sub_mgr = new (ptr) SubObjectMgr(ta_, enable_no_log_,
|
sub_mgr = new (ptr) SubObjectMgr(ta_, enable_no_log_,
|
||||||
ablock_size_, enable_dirty_list_, blk_mgr_);
|
ablock_size_, enable_dirty_list_, blk_mgr_);
|
||||||
|
|||||||
Reference in New Issue
Block a user