* This is required to permit relinking with newer versions of the library.
*/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* Active attempts to check for reader Q.S. before calling sleep().
*/
_STORE_SHARED(urcu_reader->ctr, urcu_reader->ctr - RCU_GP_COUNT);
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_BP_STATIC_H */
*/
#include <urcu-pointer.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* Important !
*
{
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_BP_H */
#include <urcu/uatomic_arch.h>
#include <urcu/list.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
/*
* Number of entries in the per-thread defer queue. Must be power of 2.
struct list_head list; /* list of thread queues */
};
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_DEFER_STATIC_H */
#include <stdlib.h>
#include <pthread.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* Note: the defer_rcu() API is currently EXPERIMENTAL. It may change in the
* future.
extern void rcu_defer_barrier(void);
extern void rcu_defer_barrier_thread(void);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_BATCH_H */
#include <urcu/system.h>
#include <urcu/uatomic_arch.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* _rcu_dereference - reads (copy) a RCU-protected pointer to a local variable
* into a RCU read-side critical section. The pointer can later be safely
#define _rcu_assign_pointer(p, v) _rcu_set_pointer(&(p), v)
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_POINTER_STATIC_H */
#include <urcu/arch.h>
#include <urcu/uatomic_arch.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifdef _LGPL_SOURCE
#include <urcu-pointer-static.h>
*/
#define rcu_assign_pointer(p, v) rcu_set_pointer((&p), (v))
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_POINTER_H */
#include <urcu/list.h>
#include <urcu/urcu-futex.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* This code section can only be included in LGPL 2.1 compatible source code.
* See below for the function call wrappers which can be used in code meant to
smp_mb();
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_QSBR_STATIC_H */
*/
#include <urcu-pointer.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* Important !
*
extern void rcu_register_thread(void);
extern void rcu_unregister_thread(void);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_QSBR_H */
#include <urcu/list.h>
#include <urcu/urcu-futex.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* This code section can only be included in LGPL 2.1 compatible source code.
* See below for the function call wrappers which can be used in code meant to
}
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_STATIC_H */
*/
#include <urcu-pointer.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* Important !
*
*/
extern void urcu_init(void);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_H */
#include <urcu/compiler.h>
#include <urcu/config.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define CONFIG_HAVE_MEM_COHERENCY
/* Include size of POWER5+ L3 cache lines: 256 bytes */
}
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_ARCH_PPC_H */
#include <compiler.h>
#include <urcu/config.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define CONFIG_HAVE_MEM_COHERENCY
#define CACHE_LINE_SIZE 128
return cycles;
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_ARCH_S390_H */
#include <urcu/compiler.h>
#include <urcu/config.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define CONFIG_HAVE_MEM_COHERENCY
#define CACHE_LINE_SIZE 256
return 0; /* unimplemented */
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_ARCH_SPARC64_H */
#include <urcu/compiler.h>
#include <urcu/config.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define CONFIG_HAVE_MEM_COHERENCY
#define CACHE_LINE_SIZE 128
return ret;
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_ARCH_X86_H */
#include <urcu/compiler.h>
#include <urcu/system.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifndef __SIZEOF_LONG__
#ifdef __powerpc64__
#define __SIZEOF_LONG__ 8
#define compat_uatomic_cmpxchg(ptr, old, _new) uatomic_cmpxchg(ptr, old, _new)
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_ARCH_UATOMIC_PPC_H */
#include <urcu/compiler.h>
#include <urcu/system.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifndef __SIZEOF_LONG__
#ifdef __s390x__
#define __SIZEOF_LONG__ 8
#define compat_uatomic_cmpxchg(ptr, old, _new) uatomic_cmpxchg(ptr, old, _new)
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_UATOMIC_ARCH_S390_H */
#include <urcu/compiler.h>
#include <urcu/system.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifndef __SIZEOF_LONG__
#ifdef __LP64__
#define __SIZEOF_LONG__ 8
#define compat_uatomic_cmpxchg(ptr, old, _new) uatomic_cmpxchg(ptr, old, _new)
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_ARCH_UATOMIC_PPC_H */
#include <urcu/compiler.h>
#include <urcu/system.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifndef __SIZEOF_LONG__
#if defined(__x86_64__) || defined(__amd64__)
#define __SIZEOF_LONG__ 8
#define uatomic_inc(addr) UATOMIC_COMPAT(inc(addr))
#define uatomic_dec(addr) UATOMIC_COMPAT(dec(addr))
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_ARCH_UATOMIC_X86_H */
#include <urcu/config.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define FUTEX_WAIT 0
#define FUTEX_WAKE 1
compat_futex_async(uaddr, op, val, timeout, uaddr2, val3)
#endif
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_FUTEX_H */