diff options
Diffstat (limited to 'src/platform')
| -rw-r--r-- | src/platform/posix/posix_atomic.c | 7 | ||||
| -rw-r--r-- | src/platform/posix/posix_ipc.h | 8 | ||||
| -rw-r--r-- | src/platform/posix/posix_ipcdial.c | 10 | ||||
| -rw-r--r-- | src/platform/posix/posix_tcp.h | 8 | ||||
| -rw-r--r-- | src/platform/posix/posix_tcpdial.c | 8 | ||||
| -rw-r--r-- | src/platform/windows/win_thread.c | 6 |
6 files changed, 25 insertions, 22 deletions
diff --git a/src/platform/posix/posix_atomic.c b/src/platform/posix/posix_atomic.c index 60875845..69c2a2c1 100644 --- a/src/platform/posix/posix_atomic.c +++ b/src/platform/posix/posix_atomic.c @@ -105,7 +105,7 @@ nni_atomic_swap(nni_atomic_int *v, int i) void nni_atomic_inc(nni_atomic_int *v) { - atomic_fetch_add(&v->v, 1); + atomic_fetch_add_explicit(&v->v, 1, memory_order_relaxed); } void @@ -117,7 +117,7 @@ nni_atomic_dec(nni_atomic_int *v) int nni_atomic_dec_nv(nni_atomic_int *v) { - return (atomic_fetch_sub(&v->v, 1) - 1); + return (atomic_fetch_sub_explicit(&v->v, 1, memory_order_acq_rel) - 1); } bool @@ -319,10 +319,11 @@ nni_atomic_get(nni_atomic_int *v) { return (__atomic_load_n(&v->v, __ATOMIC_SEQ_CST)); } + void nni_atomic_inc(nni_atomic_int *v) { - __atomic_add_fetch(&v->v, 1, __ATOMIC_SEQ_CST); + __atomic_add_fetch(&v->v, 1, __ATOMIC_RELAXED); } void diff --git a/src/platform/posix/posix_ipc.h b/src/platform/posix/posix_ipc.h index 4ef5fa80..98af298b 100644 --- a/src/platform/posix/posix_ipc.h +++ b/src/platform/posix/posix_ipc.h @@ -22,12 +22,12 @@ struct nni_ipc_conn { nng_stream stream; - nni_posix_pfd * pfd; + nni_posix_pfd *pfd; nni_list readq; nni_list writeq; bool closed; nni_mtx mtx; - nni_aio * dial_aio; + nni_aio *dial_aio; nni_ipc_dialer *dialer; nng_sockaddr sa; nni_reap_node reap; @@ -39,7 +39,7 @@ struct nni_ipc_dialer { bool closed; nni_mtx mtx; nng_sockaddr sa; - nni_atomic_u64 ref; + nni_atomic_int ref; nni_atomic_bool fini; }; @@ -51,4 +51,4 @@ extern void nni_posix_ipc_dialer_rele(nni_ipc_dialer *); #endif // NNG_PLATFORM_POSIX -#endif // PLATFORM_POSIX_IPC_H
\ No newline at end of file +#endif // PLATFORM_POSIX_IPC_H diff --git a/src/platform/posix/posix_ipcdial.c b/src/platform/posix/posix_ipcdial.c index 1f7728b7..7799aca2 100644 --- a/src/platform/posix/posix_ipcdial.c +++ b/src/platform/posix/posix_ipcdial.c @@ -1,5 +1,5 @@ // -// Copyright 2023 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> // Copyright 2019 Devolutions <info@devolutions.net> // @@ -69,7 +69,7 @@ ipc_dialer_free(void *arg) void nni_posix_ipc_dialer_rele(ipc_dialer *d) { - if (((nni_atomic_dec64_nv(&d->ref)) != 0) || + if (((nni_atomic_dec_nv(&d->ref)) != 0) || (!nni_atomic_get_bool(&d->fini))) { return; } @@ -176,7 +176,7 @@ ipc_dialer_dial(void *arg, nni_aio *aio) return; } - nni_atomic_inc64(&d->ref); + nni_atomic_inc(&d->ref); if ((rv = nni_posix_ipc_alloc(&c, &d->sa, d)) != 0) { (void) close(fd); @@ -323,8 +323,8 @@ nni_ipc_dialer_alloc(nng_stream_dialer **dp, const nng_url *url) d->sd.sd_get = ipc_dialer_get; d->sd.sd_set = ipc_dialer_set; nni_atomic_init_bool(&d->fini); - nni_atomic_init64(&d->ref); - nni_atomic_inc64(&d->ref); + nni_atomic_init(&d->ref); + nni_atomic_inc(&d->ref); *dp = (void *) d; return (0); diff --git a/src/platform/posix/posix_tcp.h b/src/platform/posix/posix_tcp.h index a8d1308e..20504bf5 100644 --- a/src/platform/posix/posix_tcp.h +++ b/src/platform/posix/posix_tcp.h @@ -18,12 +18,12 @@ struct nni_tcp_conn { nng_stream stream; - nni_posix_pfd * pfd; + nni_posix_pfd *pfd; nni_list readq; nni_list writeq; bool closed; nni_mtx mtx; - nni_aio * dial_aio; + nni_aio *dial_aio; nni_tcp_dialer *dialer; nni_reap_node reap; }; @@ -36,7 +36,7 @@ struct nni_tcp_dialer { struct sockaddr_storage src; size_t srclen; nni_mtx mtx; - nni_atomic_u64 ref; + nni_atomic_int ref; nni_atomic_bool fini; }; @@ -45,4 +45,4 @@ extern void nni_posix_tcp_init(nni_tcp_conn *, nni_posix_pfd *); extern void nni_posix_tcp_start(nni_tcp_conn *, int, int); extern void nni_posix_tcp_dialer_rele(nni_tcp_dialer *); -#endif // PLATFORM_POSIX_TCP_H
\ No newline at end of file +#endif // PLATFORM_POSIX_TCP_H diff --git a/src/platform/posix/posix_tcpdial.c b/src/platform/posix/posix_tcpdial.c index 3f0b0768..73ba4394 100644 --- a/src/platform/posix/posix_tcpdial.c +++ b/src/platform/posix/posix_tcpdial.c @@ -41,8 +41,8 @@ nni_tcp_dialer_init(nni_tcp_dialer **dp) d->nodelay = true; nni_aio_list_init(&d->connq); nni_atomic_init_bool(&d->fini); - nni_atomic_init64(&d->ref); - nni_atomic_inc64(&d->ref); + nni_atomic_init(&d->ref); + nni_atomic_inc(&d->ref); *dp = d; return (0); } @@ -87,7 +87,7 @@ nni_tcp_dialer_fini(nni_tcp_dialer *d) void nni_posix_tcp_dialer_rele(nni_tcp_dialer *d) { - if (((nni_atomic_dec64_nv(&d->ref) != 0)) || + if (((nni_atomic_dec_nv(&d->ref) != 0)) || (!nni_atomic_get_bool(&d->fini))) { return; } @@ -200,7 +200,7 @@ nni_tcp_dial(nni_tcp_dialer *d, const nni_sockaddr *sa, nni_aio *aio) return; } - nni_atomic_inc64(&d->ref); + nni_atomic_inc(&d->ref); if ((rv = nni_posix_tcp_alloc(&c, d)) != 0) { nni_aio_finish_error(aio, rv); diff --git a/src/platform/windows/win_thread.c b/src/platform/windows/win_thread.c index a6416cd8..9e74056d 100644 --- a/src/platform/windows/win_thread.c +++ b/src/platform/windows/win_thread.c @@ -1,5 +1,5 @@ // -// Copyright 2021 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> // // This software is supplied under the terms of the MIT License, a @@ -22,6 +22,8 @@ static pfnSetThreadDescription set_thread_desc; // mingw does not define InterlockedAddNoFence64, use the mingw equivalent #if defined(__MINGW32__) || defined(__MINGW64__) #define InterlockedAddNoFence(a, b) __atomic_add_fetch(a, b, __ATOMIC_RELAXED) +#define InterlockedIncrementNoFence(a) \ + __atomic_add_fetch(a, 1, __ATOMIC_RELAXED) #define InterlockedAddNoFence64(a, b) \ __atomic_add_fetch(a, b, __ATOMIC_RELAXED) #define InterlockedIncrementAcquire64(a) \ @@ -326,7 +328,7 @@ nni_atomic_init(nni_atomic_int *v) void nni_atomic_inc(nni_atomic_int *v) { - (void) InterlockedIncrementAcquire(&v->v); + (void) InterlockedIncrementNoFence(&v->v); } int |
