urcu: add notice to URCU_TLS() for it is not strictly async-signal-safe
authorLai Jiangshan <laijs@cn.fujitsu.com>
Thu, 6 Sep 2012 23:07:19 +0000 (19:07 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 6 Sep 2012 23:07:19 +0000 (19:07 -0400)
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
urcu/tls-compat.h

index 192a53609fb5f6bc445f98fdd6bc26918126687e..2f4023258c2cf658da196090a68d5757cc617753 100644 (file)
@@ -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)  \
This page took 0.025186 seconds and 4 git commands to generate.