diff options
Diffstat (limited to 'src/platform')
| -rw-r--r-- | src/platform/posix/posix_ipc.h | 3 | ||||
| -rw-r--r-- | src/platform/posix/posix_ipcdial.c | 17 |
2 files changed, 7 insertions, 13 deletions
diff --git a/src/platform/posix/posix_ipc.h b/src/platform/posix/posix_ipc.h index 3f3549c6..e4bdfd97 100644 --- a/src/platform/posix/posix_ipc.h +++ b/src/platform/posix/posix_ipc.h @@ -39,8 +39,7 @@ struct nni_ipc_dialer { bool closed; nni_mtx mtx; nng_sockaddr sa; - nni_atomic_int ref; - nni_atomic_bool fini; + nni_refcnt ref; }; extern int nni_posix_ipc_alloc( diff --git a/src/platform/posix/posix_ipcdial.c b/src/platform/posix/posix_ipcdial.c index 25be2e81..8f54f588 100644 --- a/src/platform/posix/posix_ipcdial.c +++ b/src/platform/posix/posix_ipcdial.c @@ -58,8 +58,9 @@ ipc_dialer_stop(void *arg) } static void -ipc_dialer_fini(ipc_dialer *d) +ipc_dialer_fini(void *arg) { + ipc_dialer *d = arg; nni_mtx_fini(&d->mtx); NNI_FREE_STRUCT(d); } @@ -70,18 +71,14 @@ ipc_dialer_free(void *arg) ipc_dialer *d = arg; ipc_dialer_stop(d); - nni_atomic_set_bool(&d->fini, true); + nni_posix_ipc_dialer_rele(d); } void nni_posix_ipc_dialer_rele(ipc_dialer *d) { - if (((nni_atomic_dec_nv(&d->ref)) != 0) || - (!nni_atomic_get_bool(&d->fini))) { - return; - } - ipc_dialer_fini(d); + nni_refcnt_rele(&d->ref); } static void @@ -185,7 +182,7 @@ ipc_dialer_dial(void *arg, nni_aio *aio) return; } - nni_atomic_inc(&d->ref); + nni_refcnt_hold(&d->ref); if ((rv = nni_posix_ipc_alloc(&c, &d->sa, d, fd)) != 0) { (void) close(fd); @@ -324,9 +321,7 @@ nni_ipc_dialer_alloc(nng_stream_dialer **dp, const nng_url *url) d->sd.sd_dial = ipc_dialer_dial; d->sd.sd_get = ipc_dialer_get; d->sd.sd_set = ipc_dialer_set; - nni_atomic_init_bool(&d->fini); - nni_atomic_init(&d->ref); - nni_atomic_inc(&d->ref); + nni_refcnt_init(&d->ref, 1, d, ipc_dialer_fini); *dp = (void *) d; return (0); |
