doc/examples: fix typo in list example
[urcu.git] / urcu.c
diff --git a/urcu.c b/urcu.c
index da6839f0c25b88b4262e9a615bd197220789c185..1d5c06f53c565af243fb45c5e47c1ebb609dff97 100644 (file)
--- a/urcu.c
+++ b/urcu.c
  */
 #define RCU_QS_ACTIVE_ATTEMPTS 100
 
+/*
+ * RCU_MEMBARRIER is only possibly available on Linux.
+ */
+#if defined(RCU_MEMBARRIER) && defined(__linux__)
+#include <syscall.h>
+#endif
+
+/* If the headers do not support SYS_membarrier, fall back on RCU_MB */
+#ifdef SYS_membarrier
+# define membarrier(...)               syscall(SYS_membarrier, __VA_ARGS__)
+#else
+# define membarrier(...)               -ENOSYS
+#endif
+
+#define MEMBARRIER_EXPEDITED           (1 << 0)
+#define MEMBARRIER_DELAYED             (1 << 1)
+#define MEMBARRIER_QUERY               (1 << 16)
+
 #ifdef RCU_MEMBARRIER
 static int init_done;
 int rcu_has_sys_membarrier;
@@ -83,7 +101,7 @@ void __attribute__((destructor)) rcu_exit(void);
 #endif
 
 static pthread_mutex_t rcu_gp_lock = PTHREAD_MUTEX_INITIALIZER;
-struct urcu_gp rcu_gp = { .ctr = RCU_GP_COUNT };
+struct rcu_gp rcu_gp = { .ctr = RCU_GP_COUNT };
 
 /*
  * Written to only by each individual reader. Read by both the reader and the
@@ -139,7 +157,7 @@ static void mutex_unlock(pthread_mutex_t *mutex)
 static void smp_mb_master(int group)
 {
        if (caa_likely(rcu_has_sys_membarrier))
-               membarrier(MEMBARRIER_EXPEDITED);
+               (void) membarrier(MEMBARRIER_EXPEDITED);
        else
                cmm_smp_mb();
 }
This page took 0.022752 seconds and 4 git commands to generate.