COMPAT+=compat_futex.c
endif
-lib_LTLIBRARIES = liburcu-cds-common.la \
+lib_LTLIBRARIES = liburcu-common.la \
liburcu.la liburcu-qsbr.la \
liburcu-mb.la liburcu-signal.la liburcu-bp.la \
- liburcu-cds.la liburcu-cds-qsbr.la \
- liburcu-cds-mb.la liburcu-cds-signal.la liburcu-cds-bp.la
+ liburcu-cds.la
-liburcu_cds_common_la_SOURCES = wfqueue.c wfstack.c $(COMPAT)
+#
+# liburcu-common contains wait-free queues (needed by call_rcu) as well
+# as futex fallbacks.
+#
+liburcu_common_la_SOURCES = wfqueue.c wfstack.c $(COMPAT)
liburcu_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
-liburcu_cds_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
+liburcu_la_LIBADD = liburcu-common.la
liburcu_qsbr_la_SOURCES = urcu-qsbr.c urcu-pointer.c $(COMPAT)
-liburcu_cds_qsbr_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
-liburcu_cds_qsbr_la_CFLAGS = -DRCU_QSBR
+liburcu_qsbr_la_LIBADD = liburcu-common.la
liburcu_mb_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
liburcu_mb_la_CFLAGS = -DRCU_MB
-liburcu_cds_mb_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
-liburcu_cds_mb_la_CFLAGS = -DRCU_MB
+liburcu_mb_la_LIBADD = liburcu-common.la
liburcu_signal_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
liburcu_signal_la_CFLAGS = -DRCU_SIGNAL
-liburcu_cds_signal_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
-liburcu_cds_signal_la_CFLAGS = -DRCU_SIGNAL
+liburcu_signal_la_LIBADD = liburcu-common.la
liburcu_bp_la_SOURCES = urcu-bp.c urcu-pointer.c $(COMPAT)
-liburcu_cds_bp_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
-liburcu_cds_bp_la_CFLAGS = -DRCU_BP
+liburcu_bp_la_LIBADD = liburcu-common.la
+
+liburcu_cds_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
+liburcu_cds_la_LIBADD = liburcu-common.la
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = liburcu-cds.pc liburcu.pc liburcu-bp.pc liburcu-qsbr.pc \
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define _LGPL_SOURCE
-
-#ifdef RCU_QSBR
-# include "urcu-qsbr.h"
-#elif defined(RCU_BP)
-# include "urcu-bp.h"
-#else
-# include "urcu.h"
-#endif
-
#undef _LGPL_SOURCE
/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
#include "urcu/rculfqueue.h"
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* Use the urcu symbols to select the appropriate rcu flavor at link time */
-#define _LGPL_SOURCE
-
-#ifdef RCU_QSBR
-# include "urcu-qsbr.h"
-#elif defined(RCU_BP)
-# include "urcu-bp.h"
-#else
-# include "urcu.h"
-#endif
-
#undef _LGPL_SOURCE
/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
#include "urcu/rculfstack.h"
URCU_BP=$(top_srcdir)/urcu-bp.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfqueue.c $(COMPAT)
URCU_DEFER=$(top_srcdir)/urcu.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfqueue.c $(COMPAT)
+URCU_COMMON_LIB=$(top_builddir)/liburcu-common.la
URCU_LIB=$(top_builddir)/liburcu.la
-URCU_CDS_LIB=$(top_builddir)/liburcu-cds.la
URCU_QSBR_LIB=$(top_builddir)/liburcu-qsbr.la
-URCU_CDS_QSBR_LIB=$(top_builddir)/liburcu-cds-qsbr.la
URCU_MB_LIB=$(top_builddir)/liburcu-mb.la
-URCU_CDS_MB_LIB=$(top_builddir)/liburcu-cds-mb.la
URCU_SIGNAL_LIB=$(top_builddir)/liburcu-signal.la
-URCU_CDS_SIGNAL_LIB=$(top_builddir)/liburcu-cds-signal.la
URCU_BP_LIB=$(top_builddir)/liburcu-bp.la
-URCU_CDS_BP_LIB=$(top_builddir)/liburcu-cds-bp.la
-URCU_CDS_COMMON_LIB=$(top_builddir)/liburcu-cds-common.la
+URCU_CDS_LIB=$(top_builddir)/liburcu-cds.la
EXTRA_DIST = $(top_srcdir)/tests/api.h runall.sh
test_urcu_lfq_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
test_urcu_lfq_dynlink_LDADD = $(URCU_CDS_LIB)
-test_urcu_wfq_SOURCES = test_urcu_wfq.c $(URCU_CDS_COMMON_LIB) $(COMPAT)
+test_urcu_wfq_SOURCES = test_urcu_wfq.c $(URCU_COMMON_LIB)
test_urcu_wfq_dynlink_SOURCES = test_urcu_wfq.c
test_urcu_wfq_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
-test_urcu_wfq_dynlink_LDADD = $(URCU_CDS_COMMON_LIB)
+test_urcu_wfq_dynlink_LDADD = $(URCU_COMMON_LIB)
test_urcu_lfs_SOURCES = test_urcu_lfs.c $(URCU_CDS_LIB) $(URCU_DEFER)
test_urcu_lfs_dynlink_SOURCES = test_urcu_lfs.c $(URCU_DEFER)
test_urcu_lfs_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
test_urcu_lfs_dynlink_LDADD = $(URCU_CDS_LIB)
-test_urcu_wfs_SOURCES = test_urcu_wfs.c $(URCU_CDS_COMMON_LIB) $(COMPAT)
+test_urcu_wfs_SOURCES = test_urcu_wfs.c $(URCU_COMMON_LIB)
test_urcu_wfs_dynlink_SOURCES = test_urcu_wfs.c
test_urcu_wfs_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
-test_urcu_wfs_dynlink_LDADD = $(URCU_CDS_COMMON_LIB)
+test_urcu_wfs_dynlink_LDADD = $(URCU_COMMON_LIB)
urcutorture.c: api.h
#define rcu_defer_barrier rcu_defer_barrier_bp
#define rcu_defer_barrier_thread rcu_defer_barrier_thread_bp
-/* Concurrent Data Structures */
-#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_bp
-#define cds_lfq_init_rcu cds_lfq_init_rcu_bp
-#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_bp
-#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_bp
-#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_bp
-
-#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_bp
-#define cds_lfs_init_rcu cds_lfs_init_rcu_bp
-#define cds_lfs_push_rcu cds_lfs_push_rcu_bp
-#define cds_lfs_pop_rcu cds_lfs_pop_rcu_bp
-
#endif /* _URCU_BP_MAP_H */
#define rcu_defer_barrier rcu_defer_barrier_qsbr
#define rcu_defer_barrier_thread rcu_defer_barrier_thread_qsbr
-/* Concurrent Data Structures */
-#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_qsbr
-#define cds_lfq_init_rcu cds_lfq_init_rcu_qsbr
-#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_qsbr
-#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_qsbr
-#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_qsbr
-
-#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_qsbr
-#define cds_lfs_init_rcu cds_lfs_init_rcu_qsbr
-#define cds_lfs_push_rcu cds_lfs_push_rcu_qsbr
-#define cds_lfs_pop_rcu cds_lfs_pop_rcu_qsbr
-
#endif /* _URCU_QSBR_MAP_H */
#define rcu_defer_barrier rcu_defer_barrier_memb
#define rcu_defer_barrier_thread rcu_defer_barrier_thread_memb
-/* Concurrent Data Structures */
-#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_memb
-#define cds_lfq_init_rcu cds_lfq_init_rcu_memb
-#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_memb
-#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_memb
-#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_memb
-
-#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_memb
-#define cds_lfs_init_rcu cds_lfs_init_rcu_memb
-#define cds_lfs_push_rcu cds_lfs_push_rcu_memb
-#define cds_lfs_pop_rcu cds_lfs_pop_rcu_memb
-
#elif defined(RCU_SIGNAL)
#define rcu_read_lock rcu_read_lock_sig
#define rcu_defer_barrier rcu_defer_barrier_sig
#define rcu_defer_barrier_thread rcu_defer_barrier_thread_sig
-/* Concurrent Data Structures */
-#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_sig
-#define cds_lfq_init_rcu cds_lfq_init_rcu_sig
-#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_sig
-#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_sig
-#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_sig
-
-#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_sig
-#define cds_lfs_init_rcu cds_lfs_init_rcu_sig
-#define cds_lfs_push_rcu cds_lfs_push_rcu_sig
-#define cds_lfs_pop_rcu cds_lfs_pop_rcu_sig
-
#elif defined(RCU_MB)
#define rcu_read_lock rcu_read_lock_mb
#define rcu_defer_barrier rcu_defer_barrier_mb
#define rcu_defer_barrier_thread rcu_defer_barrier_thread_mb
-/* Concurrent Data Structures */
-#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_mb
-#define cds_lfq_init_rcu cds_lfq_init_rcu_mb
-#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_mb
-#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_mb
-#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_mb
-
-#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_mb
-#define cds_lfs_init_rcu cds_lfs_init_rcu_mb
-#define cds_lfs_push_rcu cds_lfs_push_rcu_mb
-#define cds_lfs_pop_rcu cds_lfs_pop_rcu_mb
-
#else
#error "Undefined selection"
#include <urcu/static/rculfqueue.h>
-#define cds_lfq_node_init_rcu_qsbr _cds_lfq_node_init_rcu
-#define cds_lfq_init_rcu_qsbr _cds_lfq_init_rcu
-#define cds_lfq_destroy_rcu_qsbr _cds_lfq_destroy_rcu
-#define cds_lfq_enqueue_rcu_qsbr _cds_lfq_enqueue_rcu
-#define cds_lfq_dequeue_rcu_qsbr _cds_lfq_dequeue_rcu
-
-#define cds_lfq_node_init_rcu_bp _cds_lfq_node_init_rcu
-#define cds_lfq_init_rcu_bp _cds_lfq_init_rcu
-#define cds_lfq_destroy_rcu_bp _cds_lfq_destroy_rcu
-#define cds_lfq_enqueue_rcu_bp _cds_lfq_enqueue_rcu
-#define cds_lfq_dequeue_rcu_bp _cds_lfq_dequeue_rcu
-
-#define cds_lfq_node_init_rcu_memb _cds_lfq_node_init_rcu
-#define cds_lfq_init_rcu_memb _cds_lfq_init_rcu
-#define cds_lfq_destroy_rcu_memb _cds_lfq_destroy_rcu
-#define cds_lfq_enqueue_rcu_memb _cds_lfq_enqueue_rcu
-#define cds_lfq_dequeue_rcu_memb _cds_lfq_dequeue_rcu
-
-#define cds_lfq_node_init_rcu_mb _cds_lfq_node_init_rcu
-#define cds_lfq_init_rcu_mb _cds_lfq_init_rcu
-#define cds_lfq_destroy_rcu_mb _cds_lfq_destroy_rcu
-#define cds_lfq_enqueue_rcu_mb _cds_lfq_enqueue_rcu
-#define cds_lfq_dequeue_rcu_mb _cds_lfq_dequeue_rcu
-
-#define cds_lfq_node_init_rcu_sig _cds_lfq_node_init_rcu
-#define cds_lfq_init_rcu_sig _cds_lfq_init_rcu
-#define cds_lfq_destroy_rcu_sig _cds_lfq_destroy_rcu
-#define cds_lfq_enqueue_rcu_sig _cds_lfq_enqueue_rcu
-#define cds_lfq_dequeue_rcu_sig _cds_lfq_dequeue_rcu
+#define cds_lfq_node_init_rcu _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu _cds_lfq_dequeue_rcu
#else /* !_LGPL_SOURCE */
#include <urcu/static/rculfstack.h>
-#define cds_lfs_node_init_rcu_qsbr _cds_lfs_node_init_rcu
-#define cds_lfs_init_rcu_qsbr _cds_lfs_init_rcu
-#define cds_lfs_push_rcu_qsbr _cds_lfs_push_rcu
-#define cds_lfs_pop_rcu_qsbr _cds_lfs_pop_rcu
-
-#define cds_lfs_node_init_rcu_bp _cds_lfs_node_init_rcu
-#define cds_lfs_init_rcu_bp _cds_lfs_init_rcu
-#define cds_lfs_push_rcu_bp _cds_lfs_push_rcu
-#define cds_lfs_pop_rcu_bp _cds_lfs_pop_rcu
-
-#define cds_lfs_node_init_rcu_memb _cds_lfs_node_init_rcu
-#define cds_lfs_init_rcu_memb _cds_lfs_init_rcu
-#define cds_lfs_push_rcu_memb _cds_lfs_push_rcu
-#define cds_lfs_pop_rcu_memb _cds_lfs_pop_rcu
-
-#define cds_lfs_node_init_rcu_mb _cds_lfs_node_init_rcu
-#define cds_lfs_init_rcu_mb _cds_lfs_init_rcu
-#define cds_lfs_push_rcu_mb _cds_lfs_push_rcu
-#define cds_lfs_pop_rcu_mb _cds_lfs_pop_rcu
-
-#define cds_lfs_node_init_rcu_sig _cds_lfs_node_init_rcu
-#define cds_lfs_init_rcu_sig _cds_lfs_init_rcu
-#define cds_lfs_push_rcu_sig _cds_lfs_push_rcu
-#define cds_lfs_pop_rcu_sig _cds_lfs_pop_rcu
+#define cds_lfs_node_init_rcu _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu _cds_lfs_init_rcu
+#define cds_lfs_push_rcu _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu _cds_lfs_pop_rcu
#else /* !_LGPL_SOURCE */
#include <urcu-call-rcu.h>
#include <urcu/uatomic.h>
+#include <urcu-pointer.h>
#include <assert.h>
#include <errno.h>
*/
#include <urcu/uatomic.h>
+#include <urcu-pointer.h>
#ifdef __cplusplus
extern "C" {