Spelling cleanups within comments and documentation
[urcu.git] / urcu / tls-compat.h
index 9686ecaab139343547151e0f95697324c0442a55..a44b88d03066a5d5a847491496fe430f820b6ef9 100644 (file)
@@ -34,6 +34,36 @@ extern "C" {
 
 #ifdef CONFIG_RCU_TLS  /* Based on ax_tls.m4 */
 
+/*
+ * Hint: How to define/declare TLS variables of compound types
+ *       such as array or function pointers?
+ *
+ * Answer: Use typedef to assign a type_name to the compound type.
+ * Example: Define a TLS variable which is an int array with len=4:
+ *
+ *     typedef int my_int_array_type[4];
+ *     DEFINE_URCU_TLS(my_int_array_type, var_name);
+ *
+ * Another example:
+ *     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.
+ *
+ * Moreover, URCU_TLS variables should not be touched from signal
+ * handlers setup with with sigaltstack(2).
+ */
+
 # define DECLARE_URCU_TLS(type, name)  \
        CONFIG_RCU_TLS type name
 
This page took 0.02314 seconds and 4 git commands to generate.