From 3b923d7b7e8feaae98fd53367e652dee1c152ad9 Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 8 Feb 2024 16:35:15 +0000 Subject: [PATCH] Fix potential issue with IntermResultManager and DetectManager calling each other. --- src/share/detect/ob_detect_callback.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/share/detect/ob_detect_callback.cpp b/src/share/detect/ob_detect_callback.cpp index 3abcd5d3d..26befd59e 100644 --- a/src/share/detect/ob_detect_callback.cpp +++ b/src/share/detect/ob_detect_callback.cpp @@ -261,9 +261,15 @@ int ObSingleDfoDetectCB::do_callback() int ret = OB_SUCCESS; int clean_ret = OB_E(EventTable::EN_ENABLE_CLEAN_INTERM_RES) OB_SUCCESS; if (OB_SUCC(clean_ret)) { - ret = MTL(sql::dtl::ObDTLIntermResultManager*)->erase_interm_result_info(key_, false); - ret = ret == OB_HASH_NOT_EXIST ? OB_SUCCESS : ret; - LIB_LOG(WARN, "[DM] single dfo erase_interm_result_info", K(ret), K(key_), K_(trace_id)); + dtl::ObDTLIntermResultManager *interm_res_manager = MTL(dtl::ObDTLIntermResultManager*); + if (OB_ISNULL(interm_res_manager)) { + LIB_LOG(WARN, "[DM] single dfo erase_interm_result_info, but interm_res_manager is null", + K(ret), K(key_), K_(trace_id)); + } else { + ret = interm_res_manager->erase_interm_result_info(key_, false); + ret = ret == OB_HASH_NOT_EXIST ? OB_SUCCESS : ret; + LIB_LOG(WARN, "[DM] single dfo erase_interm_result_info", K(ret), K(key_), K_(trace_id)); + } } return ret; } @@ -271,9 +277,15 @@ int ObSingleDfoDetectCB::do_callback() int ObTempTableDetectCB::do_callback() { int ret = OB_SUCCESS; - ret = MTL(sql::dtl::ObDTLIntermResultManager*)->erase_interm_result_info(key_, false); - ret = ret == OB_HASH_NOT_EXIST ? OB_SUCCESS : ret; - LIB_LOG(WARN, "[DM] temp table erase_interm_result_info", K(ret), K(key_), K_(trace_id)); + dtl::ObDTLIntermResultManager *interm_res_manager = MTL(dtl::ObDTLIntermResultManager*); + if (OB_ISNULL(interm_res_manager)) { + LIB_LOG(WARN, "[DM] temp table erase_interm_result_info, but interm_res_manager is null", + K(ret), K(key_), K_(trace_id)); + } else { + ret = interm_res_manager->erase_interm_result_info(key_, false); + ret = ret == OB_HASH_NOT_EXIST ? OB_SUCCESS : ret; + LIB_LOG(WARN, "[DM] temp table erase_interm_result_info", K(ret), K(key_), K_(trace_id)); + } return ret; }