[to #53220315] fix opaque deep copy memory leak
This commit is contained in:
@ -8803,6 +8803,7 @@ int ObSPIService::spi_copy_opaque(
|
||||
ObPLOpaque &src, ObPLOpaque *&dest, uint64_t package_id)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
bool is_new_opaque = false;
|
||||
UNUSEDx(ctx, package_id);
|
||||
if (NULL == dest) {
|
||||
CK (OB_NOT_NULL(allocator));
|
||||
@ -8811,6 +8812,7 @@ int ObSPIService::spi_copy_opaque(
|
||||
LOG_WARN("failed to alloc memory for dest opaque", K(ret), K(src.get_init_size()));
|
||||
}
|
||||
OX (new (dest)ObPLOpaque());
|
||||
OX (is_new_opaque = true);
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
switch (src.get_type()) {
|
||||
@ -8834,6 +8836,10 @@ int ObSPIService::spi_copy_opaque(
|
||||
OZ (src.deep_copy(dest));
|
||||
} break;
|
||||
}
|
||||
if (OB_FAIL(ret) && is_new_opaque) {
|
||||
dest->~ObPLOpaque();
|
||||
dest = NULL;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user