From d753c00d43e6dc642b2445e4821537a92b8b8d23 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Thu, 22 Jun 2017 17:51:37 -0700 Subject: Start undoing the recursive references -- KISS. --- src/core/socket.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/core/socket.c') diff --git a/src/core/socket.c b/src/core/socket.c index 2c20705a..257f7fa3 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -555,6 +555,10 @@ nni_sock_shutdown(nni_sock *sock) } else { linger = nni_clock() + sock->s_linger; } + + NNI_LIST_FOREACH (&sock->s_eps, ep) { + nni_ep_close(ep); + } nni_mtx_unlock(&sock->s_mx); @@ -586,8 +590,10 @@ nni_sock_shutdown(nni_sock *sock) // Stop all EPS. while ((ep = nni_list_first(&sock->s_eps)) != NULL) { + nni_list_remove(&sock->s_eps, ep); nni_mtx_unlock(&sock->s_mx); nni_ep_close(ep); + nni_ep_rele(ep); nni_mtx_lock(&sock->s_mx); } @@ -625,12 +631,9 @@ nni_sock_add_ep(nni_sock *sock, nni_ep *ep) { int rv; - nni_sock_hold(sock); - nni_mtx_lock(&sock->s_mx); if (sock->s_closing) { nni_mtx_unlock(&sock->s_mx); - nni_sock_rele(sock); return (NNG_ECLOSED); } nni_list_append(&sock->s_eps, ep); @@ -652,9 +655,6 @@ nni_sock_rem_ep(nni_sock *sock, nni_ep *ep) nni_mtx_lock(&sock->s_mx); nni_list_remove(&sock->s_eps, ep); nni_mtx_unlock(&sock->s_mx); - - // Drop the reference the EP acquired in add_ep. - nni_sock_rele(sock); } @@ -833,6 +833,7 @@ nni_sock_dial(nni_sock *sock, const char *addr, nni_ep **epp, int flags) if ((rv = nni_ep_dial(ep, flags)) != 0) { nni_ep_close(ep); + nni_ep_rele(ep); } else if (epp != NULL) { *epp = ep; } @@ -853,6 +854,7 @@ nni_sock_listen(nni_sock *sock, const char *addr, nni_ep **epp, int flags) if ((rv = nni_ep_listen(ep, flags)) != 0) { nni_ep_close(ep); + nni_ep_rele(ep); } else if (epp != NULL) { *epp = ep; } -- cgit v1.2.3-70-g09d2