From b9fa44684e74518315b018b721f5444462bb45ed Mon Sep 17 00:00:00 2001 From: renju96 Date: Mon, 8 May 2023 06:38:41 +0000 Subject: [PATCH] fix the bug that mem_leak happen when failed open --- deps/oblib/src/lib/restore/ob_object_device.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/deps/oblib/src/lib/restore/ob_object_device.cpp b/deps/oblib/src/lib/restore/ob_object_device.cpp index 91e79d0ec3..6a10d0fd15 100644 --- a/deps/oblib/src/lib/restore/ob_object_device.cpp +++ b/deps/oblib/src/lib/restore/ob_object_device.cpp @@ -167,6 +167,10 @@ int ObObjectDevice::open_for_reader(const char *pathname, void*& ctx) ctx = (void*)reader; } } + if (OB_FAIL(ret) && OB_NOT_NULL(reader)) { + reader_ctx_pool_.free(reader); + reader = nullptr; + } return ret; } @@ -186,6 +190,10 @@ int ObObjectDevice::open_for_overwriter(const char *pathname, void*& ctx) ctx = (void*)overwriter; } } + if (OB_FAIL(ret) && OB_NOT_NULL(overwriter)) { + overwriter_ctx_pool_.free(overwriter); + overwriter = nullptr; + } return ret; } @@ -252,6 +260,10 @@ int ObObjectDevice::open_for_appender(const char *pathname, ObIODOpts *opts, voi ctx = appender; } } + if (OB_FAIL(ret) && OB_NOT_NULL(appender)) { + appender_ctx_pool_.free(appender); + appender = nullptr; + } return ret; }