fix srs parser glibc_malloc memory leak

This commit is contained in:
obdev
2023-08-02 04:18:11 +00:00
committed by ob-robot
parent f3e8889af3
commit 60133dd9c8
3 changed files with 8 additions and 0 deletions

View File

@ -20,6 +20,7 @@
#include "share/ob_thread_mgr.h" #include "share/ob_thread_mgr.h"
#include "share/inner_table/ob_inner_table_schema.h" #include "share/inner_table/ob_inner_table_schema.h"
#include "share/schema/ob_multi_version_schema_service.h" #include "share/schema/ob_multi_version_schema_service.h"
#include "share/rc/ob_tenant_base.h"
#include "lib/geo/ob_geo_utils.h" #include "lib/geo/ob_geo_utils.h"
using namespace oceanbase::share; using namespace oceanbase::share;
@ -457,6 +458,8 @@ int ObSrsCacheSnapShot::parse_srs_item(ObMySQLResult *result, const ObSrsItem *&
double max_x = NAN; double max_x = NAN;
double max_y = NAN; double max_y = NAN;
ObSpatialReferenceSystemBase *srs_info = NULL; ObSpatialReferenceSystemBase *srs_info = NULL;
lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(common::OB_SERVER_TENANT_ID, "SRSWKTParser"));
EXTRACT_UINT_FIELD_MYSQL(*result, "srs_id", srs_id, uint64_t); EXTRACT_UINT_FIELD_MYSQL(*result, "srs_id", srs_id, uint64_t);
EXTRACT_UINT_FIELD_MYSQL(*result, "srs_version", srs_version, uint64_t); EXTRACT_UINT_FIELD_MYSQL(*result, "srs_version", srs_version, uint64_t);
EXTRACT_VARCHAR_FIELD_MYSQL(*result, "srs_name", srs_name); EXTRACT_VARCHAR_FIELD_MYSQL(*result, "srs_name", srs_name);
@ -499,6 +502,8 @@ int ObSrsCacheSnapShot::add_pg_reserved_srs_item(const ObString &pg_wkt, const u
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
ObString proj4text; ObString proj4text;
ObSpatialReferenceSystemBase *srs_info = NULL; ObSpatialReferenceSystemBase *srs_info = NULL;
lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(common::OB_SERVER_TENANT_ID, "SRSWKTParser"));
if (OB_FAIL(ObSrsWktParser::parse_srs_wkt(allocator_, srs_id, pg_wkt, srs_info))) { if (OB_FAIL(ObSrsWktParser::parse_srs_wkt(allocator_, srs_id, pg_wkt, srs_info))) {
LOG_WARN("failed to parse pg reserved srs wkt", K(ret), K(srs_id), K(pg_wkt)); LOG_WARN("failed to parse pg reserved srs wkt", K(ret), K(srs_id), K(pg_wkt));
} else { } else {

View File

@ -306,6 +306,7 @@ int ObDASUtils::generate_spatial_index_rows(
const ObSrsBoundsItem *srs_bound = NULL; const ObSrsBoundsItem *srs_bound = NULL;
uint32_t srid = UINT32_MAX; uint32_t srid = UINT32_MAX;
uint64_t rowkey_num = das_ctdef.table_param_.get_data_table().get_rowkey_column_num(); uint64_t rowkey_num = das_ctdef.table_param_.get_data_table().get_rowkey_column_num();
lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), "S2Adapter"));
if (OB_FAIL(ObGeoTypeUtil::get_srid_from_wkb(wkb_str, srid))) { if (OB_FAIL(ObGeoTypeUtil::get_srid_from_wkb(wkb_str, srid))) {
LOG_WARN("failed to get srid", K(ret), K(wkb_str)); LOG_WARN("failed to get srid", K(ret), K(wkb_str));

View File

@ -8825,6 +8825,7 @@ int ObQueryRange::get_geo_intersects_keypart(uint32_t input_srid,
} }
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), "S2Adapter"));
// build s2 object from wkb // build s2 object from wkb
if (OB_FAIL(ObGeoTypeUtil::get_type_from_wkb((buffer_geo.empty() ? wkb_str : buffer_geo), geo_type))) { if (OB_FAIL(ObGeoTypeUtil::get_type_from_wkb((buffer_geo.empty() ? wkb_str : buffer_geo), geo_type))) {
LOG_WARN("fail to get geo type by wkb", K(ret)); LOG_WARN("fail to get geo type by wkb", K(ret));
@ -8944,6 +8945,7 @@ int ObQueryRange::get_geo_coveredby_keypart(uint32_t input_srid,
} }
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), "S2Adapter"));
// build s2 object from wkb // build s2 object from wkb
if (OB_FAIL(s2object->init((buffer_geo.empty() ? wkb_str : buffer_geo), srs_bound))) { if (OB_FAIL(s2object->init((buffer_geo.empty() ? wkb_str : buffer_geo), srs_bound))) {
LOG_WARN("Init s2object failed", K(ret)); LOG_WARN("Init s2object failed", K(ret));