to issue<52267632>:fix pl temp memory leak when fail to deserialize collection

This commit is contained in:
hanr881
2023-09-25 09:10:10 +00:00
committed by ob-robot
parent fdd72c1fbe
commit 1126fa4e50

View File

@ -2471,6 +2471,7 @@ int ObCollectionType::deserialize(ObSchemaGetterGuard &schema_guard,
OX (table_data_pos_tmp += sizeof(ObObj)); OX (table_data_pos_tmp += sizeof(ObObj));
} }
} }
int64_t n = 0;
for (int64_t i = 0; OB_SUCC(ret) && i < count; ++i) { for (int64_t i = 0; OB_SUCC(ret) && i < count; ++i) {
if (ObSMUtils::update_from_bitmap(null_value, bitmap, i)) { // null value if (ObSMUtils::update_from_bitmap(null_value, bitmap, i)) { // null value
ObObj* value = reinterpret_cast<ObObj*>(table_data + table_data_pos); ObObj* value = reinterpret_cast<ObObj*>(table_data + table_data_pos);
@ -2492,9 +2493,21 @@ int ObCollectionType::deserialize(ObSchemaGetterGuard &schema_guard,
LOG_WARN("deserialize element failed", K(ret), K(i), K(element_init_size), K(count)); LOG_WARN("deserialize element failed", K(ret), K(i), K(element_init_size), K(count));
} }
} }
OX(++n);
LOG_DEBUG("deserialize element done", K(ret), KPC(this), K(i), K(element_init_size), K(count), LOG_DEBUG("deserialize element done", K(ret), KPC(this), K(i), K(element_init_size), K(count),
K(src), K(table_data), K(table_data_len), K(table_data_pos)); K(src), K(table_data), K(table_data_len), K(table_data_pos));
} }
if (OB_FAIL(ret)) {
for (int64_t j = 0; j <= n; ++j) {
ObObj* value = reinterpret_cast<ObObj*>(table_data + j);
int tmp = ObUserDefinedType::destruct_obj(*value);
if (OB_SUCCESS != tmp) {
LOG_WARN("fail torelease memory", K(ret), K(tmp));
}
value->set_type(ObMaxType);
}
collection_allocator->reset();
}
} }
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
ObElemDesc elem_desc; ObElemDesc elem_desc;