From fa8e909ea6b71efe42c1314a8e7221029ba999ae Mon Sep 17 00:00:00 2001 From: liucc1997 <1192520566@qq.com> Date: Fri, 26 May 2023 08:16:49 +0000 Subject: [PATCH] fix async rpc callbcack hasn't been executed when cb.cloned failed --- deps/oblib/src/rpc/obrpc/ob_poc_rpc_proxy.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/deps/oblib/src/rpc/obrpc/ob_poc_rpc_proxy.cpp b/deps/oblib/src/rpc/obrpc/ob_poc_rpc_proxy.cpp index 05370bdf55..1913d2823c 100644 --- a/deps/oblib/src/rpc/obrpc/ob_poc_rpc_proxy.cpp +++ b/deps/oblib/src/rpc/obrpc/ob_poc_rpc_proxy.cpp @@ -80,19 +80,24 @@ ObAsyncRespCallback* ObAsyncRespCallback::create(ObRpcMemPool& pool, UAsyncCB* u UAsyncCB* cb = NULL; ObAsyncRespCallback* pcb = NULL; if (NULL == (pcb = (ObAsyncRespCallback*)pool.alloc(sizeof(ObAsyncRespCallback)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; RPC_LOG(WARN, "alloc resp callback fail", K(ret)); } else { if (NULL != ucb) { if (NULL == (cb = ucb->clone(sp_alloc))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + pcb = NULL; RPC_LOG(WARN, "ucb.clone fail", K(ret)); } else { cb->low_level_cb_ = pcb; if (cb != ucb) { cb->set_cloned(true); } + new(pcb)ObAsyncRespCallback(pool, cb); } + } else { + new(pcb)ObAsyncRespCallback(pool, NULL); } - new(pcb)ObAsyncRespCallback(pool, cb); } return pcb; }