Fix errors of no unity build related to common_realloc.

This commit is contained in:
tushicheng 2024-11-04 13:44:03 +00:00 committed by ob-robot
parent 55bbe44590
commit c01f6650be
4 changed files with 42 additions and 12 deletions

View File

@ -35,9 +35,9 @@ void *ObTenantCtxAllocator::alloc(const int64_t size, const ObMemAttr &attr)
abort_unless(attr.ctx_id_ == ctx_id_);
void *ptr = NULL;
if (OB_LIKELY(ObSubCtxIds::MAX_SUB_CTX_ID == attr.sub_ctx_id_)) {
ptr = common_realloc(NULL, size, attr, *this, obj_mgr_);
ptr = inner_common_realloc(NULL, size, attr, *this, obj_mgr_);
} else if (OB_UNLIKELY(attr.sub_ctx_id_ < ObSubCtxIds::MAX_SUB_CTX_ID)) {
ptr = common_realloc(NULL, size, attr, *this, obj_mgrs_[attr.sub_ctx_id_]);
ptr = inner_common_realloc(NULL, size, attr, *this, obj_mgrs_[attr.sub_ctx_id_]);
} else {
LIB_LOG_RET(WARN, OB_ERR_UNEXPECTED, "allocate memory with unexpected sub_ctx_id");
}
@ -53,7 +53,7 @@ int64_t ObTenantCtxAllocator::get_obj_hold(void *ptr)
void* ObTenantCtxAllocator::realloc(const void *ptr, const int64_t size, const ObMemAttr &attr)
{
void *nptr = common_realloc(ptr, size, attr, *this, obj_mgr_);
void *nptr = inner_common_realloc(ptr, size, attr, *this, obj_mgr_);
return nptr;
}
@ -468,7 +468,7 @@ void ObTenantCtxAllocator::on_free(AObject &obj)
}
template <typename T>
void* ObTenantCtxAllocator::common_realloc(const void *ptr, const int64_t size,
void* ObTenantCtxAllocator::inner_common_realloc(const void *ptr, const int64_t size,
const ObMemAttr &attr, ObTenantCtxAllocator& ta,
T &allocator)
{

View File

@ -32,6 +32,12 @@ struct LabelItem;
}
namespace lib
{
class IObjectMgr
{
public:
virtual AObject *realloc_object(AObject *obj, const uint64_t size, const ObMemAttr &attr) = 0;
virtual void free_object(AObject *obj) = 0;
};
class ObTenantCtxAllocator
: public common::ObIAllocator,
private common::ObLink
@ -299,16 +305,22 @@ private:
}
return ret;
}
public:
static void* common_realloc(const void *ptr, const int64_t size,
const ObMemAttr &attr, ObTenantCtxAllocator& ta,
IObjectMgr &mgr)
{
return inner_common_realloc(ptr, size, attr, ta, mgr);
}
static void common_free(void *ptr);
private:
static void on_alloc(AObject& obj, const ObMemAttr& attr);
static void on_free(AObject& obj);
public:
template <typename T>
static void* common_realloc(const void *ptr, const int64_t size,
static void* inner_common_realloc(const void *ptr, const int64_t size,
const ObMemAttr &attr, ObTenantCtxAllocator& ta,
T &allocator);
static void common_free(void *ptr);
private:
ObTenantResourceMgrHandle resource_handle_;

View File

@ -244,7 +244,7 @@ SubObjectMgr *ObjectMgr::create_sub_mgr()
attr.label_ = common::ObModIds::OB_TENANT_CTX_ALLOCATOR;
attr.ctx_id_ = ObCtxIds::DEFAULT_CTX_ID;
attr.ignore_version_ = true;
class SubObjectMgrWrapper {
class SubObjectMgrWrapper : public IObjectMgr {
public:
SubObjectMgrWrapper(SubObjectMgr& sub_mgr)
: sub_mgr_(sub_mgr)

View File

@ -36,15 +36,33 @@ void *ObAllocator::alloc(const int64_t size, const ObMemAttr &attr)
}
auto ta = lib::ObMallocAllocator::get_instance()->get_tenant_ctx_allocator(inner_attr.tenant_id_,
inner_attr.ctx_id_);
ObjectSet *os = NULL;
if (OB_LIKELY(NULL != ta)) {
ptr = ObTenantCtxAllocator::common_realloc(NULL, size, inner_attr, *(ta.ref_allocator()), os_);
os = &os_;
} else if (FORCE_MALLOC_FOR_ABSENT_TENANT()) {
inner_attr.tenant_id_ = OB_SERVER_TENANT_ID;
ta = lib::ObMallocAllocator::get_instance()->get_tenant_ctx_allocator(inner_attr.tenant_id_,
inner_attr.ctx_id_);
if (NULL != ta) {
ptr = ObTenantCtxAllocator::common_realloc(NULL, size, inner_attr, *(ta.ref_allocator()), nos_);
}
os = &nos_;
}
if (NULL != ta) {
class Wrapper : public lib::IObjectMgr {
public:
Wrapper(ObjectSet &os)
: os_(os)
{}
AObject *realloc_object(AObject *obj, const uint64_t size, const ObMemAttr &attr)
{
return os_.realloc_object(obj, size, attr);
}
void free_object(AObject *obj)
{
os_.free_object(obj);
}
private:
ObjectSet& os_;
} os_wrapper(*os);
ptr = ObTenantCtxAllocator::common_realloc(NULL, size, inner_attr, *(ta.ref_allocator()), os_wrapper);
}
}
return ptr;