From d8ffb0b277e7f5d5edc17585543ee78921efc077 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sat, 31 Dec 2016 14:51:59 -0800 Subject: More use after free. --- src/core/endpt.c | 6 ++++++ src/core/socket.c | 7 ------- 2 files changed, 6 insertions(+), 7 deletions(-) (limited to 'src/core') diff --git a/src/core/endpt.c b/src/core/endpt.c index d077122d..67d17cea 100644 --- a/src/core/endpt.c +++ b/src/core/endpt.c @@ -55,6 +55,11 @@ nni_endpt_create(nni_endpt **epp, nni_socket *sock, const char *addr) nni_free(ep, sizeof (*ep)); return (rv); } + + nni_mutex_enter(&sock->s_mx); + nni_list_append(&sock->s_eps, ep); + nni_mutex_exit(&sock->s_mx); + *epp = ep; return (0); } @@ -78,6 +83,7 @@ nni_endpt_close(nni_endpt *ep) ep->ep_pipe = NULL; } nni_cond_broadcast(&ep->ep_cv); + nni_list_remove(&ep->ep_sock->s_eps, ep); nni_mutex_exit(mx); if (ep->ep_dialer != NULL) { diff --git a/src/core/socket.c b/src/core/socket.c index 1cba29c2..0cbd49d6 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -169,7 +169,6 @@ nni_socket_close(nni_socket *sock) // Stop all EPS. We're going to do this first, since we know // we're closing. while ((ep = nni_list_first(&sock->s_eps)) != NULL) { - nni_list_remove(&sock->s_eps, ep); nni_mutex_exit(&sock->s_mx); nni_endpt_close(ep); nni_mutex_enter(&sock->s_mx); @@ -342,9 +341,6 @@ nni_socket_dial(nni_socket *sock, const char *addr, nni_endpt **epp, int flags) if (epp != NULL) { *epp = ep; } - nni_mutex_enter(&sock->s_mx); - nni_list_append(&sock->s_eps, ep); - nni_mutex_exit(&sock->s_mx); } return (rv); } @@ -367,9 +363,6 @@ nni_socket_listen(nni_socket *sock, const char *addr, nni_endpt **epp, if (epp != NULL) { *epp = ep; } - nni_mutex_enter(&sock->s_mx); - nni_list_append(&sock->s_eps, ep); - nni_mutex_exit(&sock->s_mx); } return (rv); } -- cgit v1.2.3-70-g09d2