From: Lai Jiangshan Date: Thu, 6 Sep 2012 23:07:19 +0000 (-0400) Subject: urcu: add notice to URCU_TLS() for it is not strictly async-signal-safe X-Git-Tag: v0.7.5~4 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=fa320ad0278a5e2ab4bfa837ffccfadcdaac4166;p=userspace-rcu.git urcu: add notice to URCU_TLS() for it is not strictly async-signal-safe Signed-off-by: Lai Jiangshan Signed-off-by: Mathieu Desnoyers --- diff --git a/urcu/tls-compat.h b/urcu/tls-compat.h index 192a536..2f40232 100644 --- a/urcu/tls-compat.h +++ b/urcu/tls-compat.h @@ -47,6 +47,18 @@ extern "C" { * Another exmaple: * typedef void (*call_rcu_flavor)(struct rcu_head *, XXXX); * DECLARE_URCU_TLS(call_rcu_flavor, p_call_rcu); + * + * NOTE: URCU_TLS() is NOT async-signal-safe, you can't use it + * inside any function which can be called from signal handler. + * + * But if pthread_getspecific() is async-signal-safe in your + * platform, you can make URCU_TLS() async-signal-safe via: + * ensuring the first call to URCU_TLS() of a given TLS variable of + * all threads is called earliest from a non-signal handler function. + * + * Example: In any thread, the first call of URCU_TLS(rcu_reader) + * is called from rcu_register_thread(), so we can ensure all later + * URCU_TLS(rcu_reader) in any thread is async-signal-safe. */ # define DECLARE_URCU_TLS(type, name) \