From 727f819de5737f4be5b9f7e50aacf84c7a3f7999 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 16 Sep 2009 09:30:22 -0400 Subject: [PATCH] Expose nop QSBR read lock to non-GPL/LGPL programs Signed-off-by: Mathieu Desnoyers --- urcu-qsbr.c | 1 + urcu-qsbr.h | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/urcu-qsbr.c b/urcu-qsbr.c index d1f5d91..ccecab4 100644 --- a/urcu-qsbr.c +++ b/urcu-qsbr.c @@ -32,6 +32,7 @@ #include #include +#define BUILD_QSBR_LIB #include "urcu-qsbr-static.h" /* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */ #include "urcu-qsbr.h" diff --git a/urcu-qsbr.h b/urcu-qsbr.h index 1dc4ddd..9a2c82f 100644 --- a/urcu-qsbr.h +++ b/urcu-qsbr.h @@ -66,9 +66,32 @@ * library wrappers to be used by non-LGPL compatible source code. */ +/* + * QSBR read lock/unlock are guaranteed to be no-ops. Therefore, we expose them + * in the LGPL header for any code to use. However, the debug version is not + * nops and may contain sanity checks. To activate it, applications must be + * recompiled with -DURCU_DEBUG (even non-LGPL/GPL applications). This is the + * best trade-off between license/performance/code triviality and + * library debugging & tracing features we could come up with. + */ + +#if (!defined(BUILD_QSBR_LIB) && defined(URCU_DEBUG)) + +static inline void rcu_read_lock(void) +{ +} + +static inline void rcu_read_lock(void) +{ +} + +#else /* !URCU_DEBUG */ + extern void rcu_read_lock(void); extern void rcu_read_unlock(void); +#endif /* !URCU_DEBUG */ + extern void *rcu_dereference(void *p); extern void rcu_quiescent_state(void); -- 2.34.1