fix async rpc callbcack hasn't been executed when cb.cloned failed
This commit is contained in:
@ -80,20 +80,25 @@ 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);
|
new(pcb)ObAsyncRespCallback(pool, cb);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
new(pcb)ObAsyncRespCallback(pool, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
return pcb;
|
return pcb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user