fix memory leave and hang when handle_error

This commit is contained in:
Rongsong Shen 2025-11-18 15:22:33 +08:00
parent e3946383f4
commit 26e3c21c87
4 changed files with 12 additions and 4 deletions

View file

@ -285,6 +285,7 @@ static int handle_connection(struct epoll_event* p)
ep2->iomgr = iomgr;
endpoint_set_owner(ep2, c);
endpoint_set_peer(ep2, c->myhost);
endpoint_set_msg_handler(ep2, (msg_handler_t)handle_msg);
endpoint_set_err_handler(ep2, (err_handler_t)handle_endpoint_error);

View file

@ -575,7 +575,7 @@ int cmd_workerlist(int argc, char* argv[])
workers[i]->attrs->maxtmp, workers[i]->attrs->ndisks);
}
free(workers);
free_Worker_list(rc, workers);
return 0;
}

View file

@ -414,7 +414,7 @@ static int handle_output(endpoint_t* ep)
static int handle_error(endpoint_t* ep)
{
iomgr_t* iomgr = (iomgr_t*)ep->owner;
iomgr_t* iomgr = (iomgr_t*)ep->iomgr;
if (iomgr != NULL) {
iomgr_unmonitor(iomgr, ep);

View file

@ -11,6 +11,11 @@
#include "utils.h"
#include "xce/types.h"
#define REQUEST_FROM(req) \
((req)->from == NULL) \
? "Unknown" \
: (((req)->from->name == NULL) ? "Unknown" : (req->from->name))
int xce_encode(xce_request_t* req, io_packet_t* pkt)
{
struct capn c;
@ -19,7 +24,8 @@ int xce_encode(xce_request_t* req, io_packet_t* pkt)
Request_ptr rp;
int rc;
TRACE("%s request op %d seq %ld", __func__, req->opcode, req->seq);
TRACE("%s request op %d seq %ld from %s", __func__, req->opcode, req->seq,
REQUEST_FROM(req));
capn_init_malloc(&c);
cs = capn_root(&c).seg;
@ -58,7 +64,8 @@ int xce_decode(io_packet_t* pkt, xce_request_t* req)
decode_Request(req, &rq);
TRACE("%s request opcode %d seq %ld", __func__, req->opcode, req->seq);
TRACE("%s request op %d seq %ld from %s", __func__, req->opcode, req->seq,
REQUEST_FROM(req));
capn_free(&c);
free_packet(pkt);