aboutsummaryrefslogtreecommitdiff
path: root/src/platform/posix
diff options
context:
space:
mode:
authoralvin1221 <68314044+alvin1221@users.noreply.github.com>2022-05-30 11:00:57 +0800
committerGitHub <noreply@github.com>2022-05-29 20:00:57 -0700
commitc6d2d1f474a83fcf3312a17b041db344236fa0fe (patch)
tree6addf0a59988bfeef47c66c8e485aef412dfb2ea /src/platform/posix
parent722bf4621703ef238fa81018f8c3e68bcef91354 (diff)
downloadnng-c6d2d1f474a83fcf3312a17b041db344236fa0fe.tar.gz
nng-c6d2d1f474a83fcf3312a17b041db344236fa0fe.tar.bz2
nng-c6d2d1f474a83fcf3312a17b041db344236fa0fe.zip
fixes #1586 Undefined reference to nni_atomic_swap & nni_atomic_cas(Built by gcc 4.8.5 ). (#1587)
Diffstat (limited to 'src/platform/posix')
-rw-r--r--src/platform/posix/posix_atomic.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/platform/posix/posix_atomic.c b/src/platform/posix/posix_atomic.c
index 0f904ae1..60875845 100644
--- a/src/platform/posix/posix_atomic.c
+++ b/src/platform/posix/posix_atomic.c
@@ -284,6 +284,12 @@ nni_atomic_cas64(nni_atomic_u64 *v, uint64_t comp, uint64_t new)
&v->v, &comp, new, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST));
}
+int
+nni_atomic_swap(nni_atomic_int *v, int u)
+{
+ return (__atomic_exchange_n(&v->v, u, __ATOMIC_SEQ_CST));
+}
+
void
nni_atomic_init(nni_atomic_int *v)
{
@@ -331,6 +337,13 @@ nni_atomic_dec_nv(nni_atomic_int *v)
return (__atomic_sub_fetch(&v->v, 1, __ATOMIC_SEQ_CST));
}
+bool
+nni_atomic_cas(nni_atomic_int *v, int comp, int new)
+{
+ return (__atomic_compare_exchange_n(
+ &v->v, &comp, new, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST));
+}
+
void *
nni_atomic_get_ptr(nni_atomic_ptr *v)
{