projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wfcqueue: add C++ compatibility API
[urcu.git]
/
urcu
/
static
/
urcu-pointer.h
diff --git
a/urcu/static/urcu-pointer.h
b/urcu/static/urcu-pointer.h
index 48dc5bf506d86b06ddb1b5b4cf72066508634493..28333c57746e927bfc44e06e0a9fcc2b0e4794e2 100644
(file)
--- a/
urcu/static/urcu-pointer.h
+++ b/
urcu/static/urcu-pointer.h
@@
-6,8
+6,8
@@
*
* Userspace RCU header. Operations on pointers.
*
*
* Userspace RCU header. Operations on pointers.
*
- * TO BE INCLUDED ONLY IN
LGPL-COMPATIBLE CODE. See urcu-pointer.h for
- * linking dynamically with the userspace rcu library.
+ * TO BE INCLUDED ONLY IN
CODE THAT IS TO BE RECOMPILED ON EACH LIBURCU
+ *
RELEASE. See urcu.h for
linking dynamically with the userspace rcu library.
*
* Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
* Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
*
* Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
* Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
@@
-36,7
+36,7
@@
#ifdef __cplusplus
extern "C" {
#ifdef __cplusplus
extern "C" {
-#endif
+#endif
/**
* _rcu_dereference - reads (copy) a RCU-protected pointer to a local variable
/**
* _rcu_dereference - reads (copy) a RCU-protected pointer to a local variable
@@
-59,9
+59,14
@@
extern "C" {
* addition to forthcoming C++ standard.
*
* Should match rcu_assign_pointer() or rcu_xchg_pointer().
* addition to forthcoming C++ standard.
*
* Should match rcu_assign_pointer() or rcu_xchg_pointer().
+ *
+ * This macro is less than 10 lines long. The intent is that this macro
+ * meets the 10-line criterion in LGPL, allowing this function to be
+ * expanded directly in non-LGPL code.
*/
*/
-
-#define _rcu_dereference(p) ({ \
+#define _rcu_dereference(p) \
+ __extension__ \
+ ({ \
__typeof__(p) _________p1 = CMM_LOAD_SHARED(p); \
cmm_smp_read_barrier_depends(); \
(_________p1); \
__typeof__(p) _________p1 = CMM_LOAD_SHARED(p); \
cmm_smp_read_barrier_depends(); \
(_________p1); \
@@
-73,9
+78,13
@@
extern "C" {
* data structure, which can be safely freed after waiting for a quiescent state
* using synchronize_rcu(). If fails (unexpected value), returns old (which
* should not be freed !).
* data structure, which can be safely freed after waiting for a quiescent state
* using synchronize_rcu(). If fails (unexpected value), returns old (which
* should not be freed !).
+ *
+ * This macro is less than 10 lines long. The intent is that this macro
+ * meets the 10-line criterion in LGPL, allowing this function to be
+ * expanded directly in non-LGPL code.
*/
*/
-
#define _rcu_cmpxchg_pointer(p, old, _new) \
#define _rcu_cmpxchg_pointer(p, old, _new) \
+ __extension__ \
({ \
__typeof__(*p) _________pold = (old); \
__typeof__(*p) _________pnew = (_new); \
({ \
__typeof__(*p) _________pold = (old); \
__typeof__(*p) _________pnew = (_new); \
@@
-89,9
+98,13
@@
extern "C" {
* _rcu_xchg_pointer - same as rcu_assign_pointer, but returns the previous
* pointer to the data structure, which can be safely freed after waiting for a
* quiescent state using synchronize_rcu().
* _rcu_xchg_pointer - same as rcu_assign_pointer, but returns the previous
* pointer to the data structure, which can be safely freed after waiting for a
* quiescent state using synchronize_rcu().
+ *
+ * This macro is less than 10 lines long. The intent is that this macro
+ * meets the 10-line criterion in LGPL, allowing this function to be
+ * expanded directly in non-LGPL code.
*/
*/
-
#define _rcu_xchg_pointer(p, v) \
#define _rcu_xchg_pointer(p, v) \
+ __extension__ \
({ \
__typeof__(*p) _________pv = (v); \
if (!__builtin_constant_p(v) || \
({ \
__typeof__(*p) _________pv = (v); \
if (!__builtin_constant_p(v) || \
@@
-120,12
+133,15
@@
extern "C" {
* them. It also makes sure the compiler does not reorder code initializing the
* data structure before its publication.
*
* them. It also makes sure the compiler does not reorder code initializing the
* data structure before its publication.
*
- * Should match rcu_dereference_pointer().
+ * Should match rcu_dereference().
+ *
+ * This macro is less than 10 lines long. The intent is that this macro
+ * meets the 10-line criterion in LGPL, allowing this function to be
+ * expanded directly in non-LGPL code.
*/
*/
-
#define _rcu_assign_pointer(p, v) _rcu_set_pointer(&(p), v)
#define _rcu_assign_pointer(p, v) _rcu_set_pointer(&(p), v)
-#ifdef __cplusplus
+#ifdef __cplusplus
}
#endif
}
#endif
This page took
0.025843 seconds
and
4
git commands to generate.