From e620a7fa537aa381783dcdd2f4696c4b48710723 Mon Sep 17 00:00:00 2001 From: shikokuchuo <53399081+shikokuchuo@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:55:16 +0000 Subject: [PATCH] req protocol: free msg early if no retries --- src/sp/protocol/reqrep0/req.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/sp/protocol/reqrep0/req.c b/src/sp/protocol/reqrep0/req.c index 0a10462ae..468ece155 100644 --- a/src/sp/protocol/reqrep0/req.c +++ b/src/sp/protocol/reqrep0/req.c @@ -359,7 +359,10 @@ req0_recv_cb(void *arg) nni_id_remove(&s->requests, id); ctx->request_id = 0; if (ctx->req_msg != NULL) { - nni_msg_free(ctx->req_msg); + // Only free msg if we originally cloned it (for retries) + if (ctx->retry > 0) { + nni_msg_free(ctx->req_msg); + } ctx->req_msg = NULL; } @@ -533,7 +536,10 @@ req0_run_send_queue(req0_sock *s, nni_aio_completions *sent_list) // At this point, we will never give this message back to // the user, so we don't have to worry about making it // unique. We can freely clone it. - nni_msg_clone(ctx->req_msg); + // But only do so if we need to hang onto it (for potential retries) + if (ctx->retry > 0) { + nni_msg_clone(ctx->req_msg); + } nni_aio_set_msg(&p->aio_send, ctx->req_msg); nni_pipe_send(p->pipe, &p->aio_send); } @@ -553,7 +559,10 @@ req0_ctx_reset(req0_ctx *ctx) ctx->request_id = 0; } if (ctx->req_msg != NULL) { - nni_msg_free(ctx->req_msg); + // Only free msg if we originally cloned it (for retries) + if (ctx->retry > 0) { + nni_msg_free(ctx->req_msg); + } ctx->req_msg = NULL; } if (ctx->rep_msg != NULL) {