Add extern "C" to support linking userspace RCU library with C++ applications
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mon, 7 Dec 2009 14:39:20 +0000 (09:39 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mon, 7 Dec 2009 14:39:20 +0000 (09:39 -0500)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
19 files changed:
urcu-bp-static.h
urcu-bp.h
urcu-defer-static.h
urcu-defer.h
urcu-pointer-static.h
urcu-pointer.h
urcu-qsbr-static.h
urcu-qsbr.h
urcu-static.h
urcu.h
urcu/arch_ppc.h
urcu/arch_s390.h
urcu/arch_sparc64.h
urcu/arch_x86.h
urcu/uatomic_arch_ppc.h
urcu/uatomic_arch_s390.h
urcu/uatomic_arch_sparc64.h
urcu/uatomic_arch_x86.h
urcu/urcu-futex.h

index ff16fd4..7db2df6 100644 (file)
  * 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().
  */
@@ -194,4 +198,8 @@ static inline void _rcu_read_unlock(void)
        _STORE_SHARED(urcu_reader->ctr, urcu_reader->ctr - RCU_GP_COUNT);
 }
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_BP_STATIC_H */
index d42a2cb..c0a419f 100644 (file)
--- a/urcu-bp.h
+++ b/urcu-bp.h
  */
 #include <urcu-pointer.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /*
  * Important !
  *
@@ -97,4 +101,8 @@ static inline void urcu_init(void)
 {
 }
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_BP_H */
index b27cfe1..8575195 100644 (file)
@@ -37,6 +37,9 @@
 #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.
@@ -127,4 +130,8 @@ struct defer_queue {
        struct list_head list;  /* list of thread queues */
 };
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_DEFER_STATIC_H */
index 00f18ff..b7fe8bf 100644 (file)
 #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.
@@ -64,4 +68,8 @@ extern void rcu_defer_unregister_thread(void);
 extern void rcu_defer_barrier(void);
 extern void rcu_defer_barrier_thread(void);
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_BATCH_H */
index eb073af..093630a 100644 (file)
 #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 */
index 948ac42..487abab 100644 (file)
 #include <urcu/arch.h>
 #include <urcu/uatomic_arch.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
 #ifdef _LGPL_SOURCE
 
 #include <urcu-pointer-static.h>
@@ -107,4 +111,8 @@ extern void *rcu_set_pointer_sym(void **p, void *v);
  */
 #define rcu_assign_pointer(p, v)       rcu_set_pointer((&p), (v))
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_POINTER_H */
index e49a041..72d3595 100644 (file)
 #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
@@ -210,4 +214,8 @@ static inline void _rcu_thread_online(void)
        smp_mb();
 }
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_QSBR_STATIC_H */
index 21c2a2e..8e6f1e4 100644 (file)
  */
 #include <urcu-pointer.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
 /*
  * Important !
  *
@@ -114,4 +118,8 @@ extern void synchronize_rcu(void);
 extern void rcu_register_thread(void);
 extern void rcu_unregister_thread(void);
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_QSBR_H */
index 97d94dc..dec8a20 100644 (file)
 #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
@@ -237,4 +241,8 @@ static inline void _rcu_read_unlock(void)
        }
 }
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_STATIC_H */
diff --git a/urcu.h b/urcu.h
index 69c06e4..da0b295 100644 (file)
--- a/urcu.h
+++ b/urcu.h
  */
 #include <urcu-pointer.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
 /*
  * Important !
  *
@@ -92,4 +96,8 @@ extern void rcu_unregister_thread(void);
  */
 extern void urcu_init(void);
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_H */
index 12b018e..49d844b 100644 (file)
 #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 */
@@ -115,4 +119,8 @@ static inline cycles_t get_cycles (void)
        }
 }
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_ARCH_PPC_H */
index 9d3d452..b400376 100644 (file)
 #include <compiler.h>
 #include <urcu/config.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
 #define CONFIG_HAVE_MEM_COHERENCY
 
 #define CACHE_LINE_SIZE        128
@@ -94,4 +98,8 @@ static inline cycles_t get_cycles (void)
        return cycles;
 }
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_ARCH_S390_H */
index a260e3a..6dcb908 100644 (file)
 #include <urcu/compiler.h>
 #include <urcu/config.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
 #define CONFIG_HAVE_MEM_COHERENCY
 
 #define CACHE_LINE_SIZE        256
@@ -100,4 +104,8 @@ static inline cycles_t get_cycles (void)
        return 0;       /* unimplemented */
 }
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_ARCH_SPARC64_H */
index f137a16..b3f2962 100644 (file)
 #include <urcu/compiler.h>
 #include <urcu/config.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
 #define CONFIG_HAVE_MEM_COHERENCY
 
 #define CACHE_LINE_SIZE        128
@@ -125,4 +129,8 @@ static inline cycles_t get_cycles(void)
         return ret;
 }
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_ARCH_X86_H */
index a32c789..b732b08 100644 (file)
 #include <urcu/compiler.h>
 #include <urcu/system.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
 #ifndef __SIZEOF_LONG__
 #ifdef __powerpc64__
 #define __SIZEOF_LONG__ 8
@@ -227,4 +231,8 @@ unsigned long _uatomic_add_return(void *addr, unsigned long val,
 
 #define compat_uatomic_cmpxchg(ptr, old, _new) uatomic_cmpxchg(ptr, old, _new)
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_ARCH_UATOMIC_PPC_H */
index ab7e942..813d970 100644 (file)
 #include <urcu/compiler.h>
 #include <urcu/system.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
 #ifndef __SIZEOF_LONG__
 #ifdef __s390x__
 #define __SIZEOF_LONG__ 8
@@ -216,4 +220,8 @@ unsigned long _uatomic_add_return(void *addr, unsigned long val, int len)
 
 #define compat_uatomic_cmpxchg(ptr, old, _new) uatomic_cmpxchg(ptr, old, _new)
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_UATOMIC_ARCH_S390_H */
index 622fe10..3aa3b7d 100644 (file)
 #include <urcu/compiler.h>
 #include <urcu/system.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
 #ifndef __SIZEOF_LONG__
 #ifdef __LP64__
 #define __SIZEOF_LONG__ 8
@@ -177,4 +181,8 @@ unsigned long _uatomic_add_return(void *addr, unsigned long val, int len)
 
 #define compat_uatomic_cmpxchg(ptr, old, _new) uatomic_cmpxchg(ptr, old, _new)
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_ARCH_UATOMIC_PPC_H */
index 8e0f0a8..b575698 100644 (file)
 #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
@@ -478,4 +482,8 @@ extern unsigned long _compat_uatomic_xchg(void *addr,
 #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 */
index 14fb5c0..95598ad 100644 (file)
 
 #include <urcu/config.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
 #define FUTEX_WAIT             0
 #define FUTEX_WAKE             1
 
@@ -55,4 +59,8 @@ extern int compat_futex_async(int *uaddr, int op, int val,
                compat_futex_async(uaddr, op, val, timeout, uaddr2, val3)
 #endif
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_FUTEX_H */
This page took 0.056893 seconds and 4 git commands to generate.