From 84c32ea006f01f10cea335a9b152ec68714f46c9 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Wed, 16 May 2018 10:03:38 -0700 Subject: fixes #440 leak in bus protocol --- src/protocol/bus0/bus.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/protocol') diff --git a/src/protocol/bus0/bus.c b/src/protocol/bus0/bus.c index 01f20130..d95f54ba 100644 --- a/src/protocol/bus0/bus.c +++ b/src/protocol/bus0/bus.c @@ -297,7 +297,12 @@ bus0_sock_getq_cb(void *arg) } nni_mtx_lock(&s->mtx); - lastp = nni_list_last(&s->pipes); + if (((lastp = nni_list_last(&s->pipes)) != NULL) && + (nni_pipe_id(lastp->npipe) == sender)) { + // If the last pipe in the list is our sender, + // then ignore it and move to the one just previous. + lastp = nni_list_prev(&s->pipes, lastp); + } NNI_LIST_FOREACH (&s->pipes, p) { if (nni_pipe_id(p->npipe) == sender) { continue; @@ -308,16 +313,14 @@ bus0_sock_getq_cb(void *arg) } } else { dup = msg; + msg = NULL; } if (nni_msgq_tryput(p->sendq, dup) != 0) { nni_msg_free(dup); } } nni_mtx_unlock(&s->mtx); - - if (lastp == NULL) { - nni_msg_free(msg); - } + nni_msg_free(msg); bus0_sock_getq(s); } -- cgit v1.2.3-70-g09d2