fix SeArray memory leak when deserializing rcode_.warnings_
This commit is contained in:
11
deps/oblib/src/rpc/obrpc/ob_poc_rpc_proxy.cpp
vendored
11
deps/oblib/src/rpc/obrpc/ob_poc_rpc_proxy.cpp
vendored
@ -87,6 +87,9 @@ ObAsyncRespCallback* ObAsyncRespCallback::create(ObRpcMemPool& pool, UAsyncCB* u
|
|||||||
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) {
|
||||||
|
cb->set_cloned(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
new(pcb)ObAsyncRespCallback(pool, cb);
|
new(pcb)ObAsyncRespCallback(pool, cb);
|
||||||
@ -107,7 +110,9 @@ int ObAsyncRespCallback::handle_resp(int io_err, const char* buf, int64_t sz)
|
|||||||
}
|
}
|
||||||
if (ucb_ == NULL) {
|
if (ucb_ == NULL) {
|
||||||
// do nothing
|
// do nothing
|
||||||
} else if (0 != io_err) {
|
} else {
|
||||||
|
bool cb_cloned = ucb_->get_cloned();
|
||||||
|
if (0 != io_err) {
|
||||||
ucb_->set_error(io_err);
|
ucb_->set_error(io_err);
|
||||||
if (OB_SUCCESS != ucb_->on_error(io_err)) {
|
if (OB_SUCCESS != ucb_->on_error(io_err)) {
|
||||||
ucb_->on_timeout();
|
ucb_->on_timeout();
|
||||||
@ -126,6 +131,10 @@ int ObAsyncRespCallback::handle_resp(int io_err, const char* buf, int64_t sz)
|
|||||||
RPC_LOG(WARN, "ucb.process fail", K(tmp_ret));
|
RPC_LOG(WARN, "ucb.process fail", K(tmp_ret));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (cb_cloned) {
|
||||||
|
ucb_->~AsyncCB();
|
||||||
|
}
|
||||||
|
}
|
||||||
pool_.destroy();
|
pool_.destroy();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
2
deps/oblib/src/rpc/pnio/io/write_queue.c
vendored
2
deps/oblib/src/rpc/pnio/io/write_queue.c
vendored
@ -92,7 +92,7 @@ int wq_flush(sock_t* s, write_queue_t* wq, dlink_t** old_head) {
|
|||||||
int err = 0;
|
int err = 0;
|
||||||
int64_t wbytes = 0;
|
int64_t wbytes = 0;
|
||||||
err = sk_flush_blist((sock_t*)s, &wq->queue.head, wq->pos, &wbytes);
|
err = sk_flush_blist((sock_t*)s, &wq->queue.head, wq->pos, &wbytes);
|
||||||
if (0 == err) {
|
if (0 == err && wbytes > 0) {
|
||||||
*old_head = wq_consume(wq, wbytes);
|
*old_head = wq_consume(wq, wbytes);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
|
Reference in New Issue
Block a user