summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2013-06-30 08:59:33 +0000
committered <ed@FreeBSD.org>2013-06-30 08:59:33 +0000
commitf288a4ea84db2f6313ae826c213b1032b0e0cd2d (patch)
tree819ca0432b4e004031624298acf0a1d4a997e13d /lib
parent69fe417f6ed3f57da1fc0b75d1686f048fd4da8b (diff)
downloadFreeBSD-src-f288a4ea84db2f6313ae826c213b1032b0e0cd2d.zip
FreeBSD-src-f288a4ea84db2f6313ae826c213b1032b0e0cd2d.tar.gz
Convert this piece of code to use C11 atomics.
As mentioned before, we should at least aim to have one piece of code in both user space and kernel space that uses C11 atomics, to get some coverage. This piece of code can be migrated trivially, so it's a good candidate.
Diffstat (limited to 'lib')
-rw-r--r--lib/librt/sigev_thread.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/librt/sigev_thread.c b/lib/librt/sigev_thread.c
index 0246c0c..2677a8e 100644
--- a/lib/librt/sigev_thread.c
+++ b/lib/librt/sigev_thread.c
@@ -28,13 +28,13 @@
*/
#include <sys/types.h>
-#include <machine/atomic.h>
#include "namespace.h"
#include <err.h>
#include <errno.h>
#include <ucontext.h>
#include <sys/thr.h>
+#include <stdatomic.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -51,7 +51,7 @@ LIST_HEAD(sigev_list_head, sigev_node);
static struct sigev_list_head sigev_hash[HASH_QUEUES];
static struct sigev_list_head sigev_all;
static LIST_HEAD(,sigev_thread) sigev_threads;
-static unsigned int sigev_generation;
+static atomic_int sigev_generation;
static pthread_mutex_t *sigev_list_mtx;
static pthread_once_t sigev_once = PTHREAD_ONCE_INIT;
static pthread_once_t sigev_once_default = PTHREAD_ONCE_INIT;
@@ -196,7 +196,8 @@ __sigev_alloc(int type, const struct sigevent *evp, struct sigev_node *prev,
if (sn != NULL) {
sn->sn_value = evp->sigev_value;
sn->sn_func = evp->sigev_notify_function;
- sn->sn_gen = atomic_fetchadd_int(&sigev_generation, 1);
+ sn->sn_gen = atomic_fetch_add_explicit(&sigev_generation, 1,
+ memory_order_relaxed);
sn->sn_type = type;
_pthread_attr_init(&sn->sn_attr);
_pthread_attr_setdetachstate(&sn->sn_attr, PTHREAD_CREATE_DETACHED);
OpenPOWER on IntegriCloud