From d137bf383892c53265593d9a5ac17e64444091c9 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sat, 4 Sep 2021 17:27:54 -0700 Subject: fixes #1498 Endpoint close/shutdown could be synchronous (#1499) --- src/core/dialer.c | 58 ++++++++++++++++++++++++++----------------------------- 1 file changed, 27 insertions(+), 31 deletions(-) (limited to 'src/core/dialer.c') diff --git a/src/core/dialer.c b/src/core/dialer.c index a9674226..4c3e563d 100644 --- a/src/core/dialer.c +++ b/src/core/dialer.c @@ -225,15 +225,20 @@ nni_dialer_bump_error(nni_dialer *d, int err) #endif } +// nni_dialer_create creates a dialer on the socket. +// The caller should have a hold on the socket, and on success +// the dialer inherits the callers hold. (If the caller wants +// an additional hold, it should get an extra hold before calling this +// function.) int -nni_dialer_create(nni_dialer **dp, nni_sock *s, const char *urlstr) +nni_dialer_create(nni_dialer **dp, nni_sock *s, const char *url_str) { - nni_sp_tran * tran; - nni_dialer *d; - int rv; - nni_url * url; + nni_sp_tran *tran; + nni_dialer *d; + int rv; + nni_url *url; - if ((rv = nni_url_parse(&url, urlstr)) != 0) { + if ((rv = nni_url_parse(&url, url_str)) != 0) { return (rv); } if (((tran = nni_sp_tran_find(url)) == NULL) || @@ -246,13 +251,12 @@ nni_dialer_create(nni_dialer **dp, nni_sock *s, const char *urlstr) nni_url_free(url); return (NNG_ENOMEM); } - d->d_url = url; - d->d_closed = false; - d->d_closing = false; - d->d_data = NULL; - d->d_ref = 1; - d->d_sock = s; - d->d_tran = tran; + d->d_url = url; + d->d_closed = false; + d->d_data = NULL; + d->d_ref = 1; + d->d_sock = s; + d->d_tran = tran; nni_atomic_flag_reset(&d->d_started); // Make a copy of the endpoint operations. This allows us to @@ -341,22 +345,6 @@ nni_dialer_rele(nni_dialer *d) } } -void -nni_dialer_close_rele(nni_dialer *d) -{ - nni_mtx_lock(&dialers_lk); - if (d->d_closed) { - nni_mtx_unlock(&dialers_lk); - nni_dialer_rele(d); - return; - } - d->d_closed = true; - nni_id_remove(&dialers, d->d_id); - nni_mtx_unlock(&dialers_lk); - - nni_dialer_rele(d); -} - void nni_dialer_close(nni_dialer *d) { @@ -389,8 +377,8 @@ static void dialer_connect_cb(void *arg) { nni_dialer *d = arg; - nni_aio * aio = &d->d_con_aio; - nni_aio * user_aio; + nni_aio *aio = &d->d_con_aio; + nni_aio *user_aio; int rv; nni_mtx_lock(&d->d_mtx); @@ -465,6 +453,14 @@ nni_dialer_start(nni_dialer *d, unsigned flags) return (rv); } +void +nni_dialer_stop(nni_dialer *d) +{ + nni_aio_stop(&d->d_tmo_aio); + nni_aio_stop(&d->d_con_aio); + d->d_ops.d_close(d->d_data); +} + nni_sock * nni_dialer_sock(nni_dialer *d) { -- cgit v1.2.3-70-g09d2