From 60133dd9c8e06be4f369a4a5e44acda7027c9c9a Mon Sep 17 00:00:00 2001 From: obdev Date: Wed, 2 Aug 2023 04:18:11 +0000 Subject: [PATCH] fix srs parser glibc_malloc memory leak --- src/observer/omt/ob_tenant_srs.cpp | 5 +++++ src/sql/das/ob_das_utils.cpp | 1 + src/sql/rewrite/ob_query_range.cpp | 2 ++ 3 files changed, 8 insertions(+) diff --git a/src/observer/omt/ob_tenant_srs.cpp b/src/observer/omt/ob_tenant_srs.cpp index b33492e69a..53e7d69d26 100644 --- a/src/observer/omt/ob_tenant_srs.cpp +++ b/src/observer/omt/ob_tenant_srs.cpp @@ -20,6 +20,7 @@ #include "share/ob_thread_mgr.h" #include "share/inner_table/ob_inner_table_schema.h" #include "share/schema/ob_multi_version_schema_service.h" +#include "share/rc/ob_tenant_base.h" #include "lib/geo/ob_geo_utils.h" using namespace oceanbase::share; @@ -457,6 +458,8 @@ int ObSrsCacheSnapShot::parse_srs_item(ObMySQLResult *result, const ObSrsItem *& double max_x = NAN; double max_y = NAN; 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_version", srs_version, uint64_t); 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; ObString proj4text; 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))) { LOG_WARN("failed to parse pg reserved srs wkt", K(ret), K(srs_id), K(pg_wkt)); } else { diff --git a/src/sql/das/ob_das_utils.cpp b/src/sql/das/ob_das_utils.cpp index 721ea3fb5e..842518336c 100644 --- a/src/sql/das/ob_das_utils.cpp +++ b/src/sql/das/ob_das_utils.cpp @@ -306,6 +306,7 @@ int ObDASUtils::generate_spatial_index_rows( const ObSrsBoundsItem *srs_bound = NULL; uint32_t srid = UINT32_MAX; 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))) { LOG_WARN("failed to get srid", K(ret), K(wkb_str)); diff --git a/src/sql/rewrite/ob_query_range.cpp b/src/sql/rewrite/ob_query_range.cpp index 570be3f6df..fa004b7a31 100644 --- a/src/sql/rewrite/ob_query_range.cpp +++ b/src/sql/rewrite/ob_query_range.cpp @@ -8825,6 +8825,7 @@ int ObQueryRange::get_geo_intersects_keypart(uint32_t input_srid, } if (OB_SUCC(ret)) { + lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), "S2Adapter")); // build s2 object from wkb 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)); @@ -8944,6 +8945,7 @@ int ObQueryRange::get_geo_coveredby_keypart(uint32_t input_srid, } if (OB_SUCC(ret)) { + lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), "S2Adapter")); // build s2 object from wkb if (OB_FAIL(s2object->init((buffer_geo.empty() ? wkb_str : buffer_geo), srs_bound))) { LOG_WARN("Init s2object failed", K(ret));