X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=urcu.c;h=32f74880492ce40527c8b5b40560249eac485b90;hp=d474fc8a3e8311c036f151698afdeaab7bde192a;hb=8fd3b21900597654e15eb8cda2e97606a4b1d9bf;hpb=81d1f1f5a2d41dfd76defc700cdf68660d12f323 diff --git a/urcu.c b/urcu.c index d474fc8..32f7488 100644 --- a/urcu.c +++ b/urcu.c @@ -37,6 +37,8 @@ #include "urcu.h" #ifndef URCU_MB +static int init_done; + void __attribute__((constructor)) urcu_init(void); void __attribute__((destructor)) urcu_exit(void); #else @@ -45,8 +47,6 @@ void urcu_init(void) } #endif -static int init_done; - static pthread_mutex_t urcu_mutex = PTHREAD_MUTEX_INITIALIZER; /* @@ -347,6 +347,12 @@ void *rcu_xchg_pointer_sym(void **p, void *v) return xchg(p, v); } +void *rcu_cmpxchg_pointer_sym(void **p, void *old, void *_new) +{ + wmb(); + return cmpxchg(p, old, _new); +} + void *rcu_publish_content_sym(void **p, void *v) { void *oldptr;