fix async rpc callbcack hasn't been executed when cb.cloned failed

This commit is contained in:
liucc1997
2023-05-26 08:16:49 +00:00
committed by ob-robot
parent 379dbe0109
commit fa8e909ea6

View File

@ -80,19 +80,24 @@ ObAsyncRespCallback* ObAsyncRespCallback::create(ObRpcMemPool& pool, UAsyncCB* u
UAsyncCB* cb = NULL; UAsyncCB* cb = NULL;
ObAsyncRespCallback* pcb = NULL; ObAsyncRespCallback* pcb = NULL;
if (NULL == (pcb = (ObAsyncRespCallback*)pool.alloc(sizeof(ObAsyncRespCallback)))) { if (NULL == (pcb = (ObAsyncRespCallback*)pool.alloc(sizeof(ObAsyncRespCallback)))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
RPC_LOG(WARN, "alloc resp callback fail", K(ret)); RPC_LOG(WARN, "alloc resp callback fail", K(ret));
} else { } else {
if (NULL != ucb) { if (NULL != ucb) {
if (NULL == (cb = ucb->clone(sp_alloc))) { if (NULL == (cb = ucb->clone(sp_alloc))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
pcb = NULL;
RPC_LOG(WARN, "ucb.clone fail", K(ret)); RPC_LOG(WARN, "ucb.clone fail", K(ret));
} else { } else {
cb->low_level_cb_ = pcb; cb->low_level_cb_ = pcb;
if (cb != ucb) { if (cb != ucb) {
cb->set_cloned(true); cb->set_cloned(true);
} }
new(pcb)ObAsyncRespCallback(pool, cb);
} }
} else {
new(pcb)ObAsyncRespCallback(pool, NULL);
} }
new(pcb)ObAsyncRespCallback(pool, cb);
} }
return pcb; return pcb;
} }