* Written to only by each individual reader. Read by both the reader and the
* writers.
*/
-DEFINE_URCU_TLS(struct rcu_reader, rcu_reader);
+__DEFINE_URCU_TLS_GLOBAL(struct rcu_reader, rcu_reader);
#ifdef DEBUG_YIELD
unsigned int rcu_yield_active;
-DEFINE_URCU_TLS(unsigned int, rcu_rand_yield);
+__DEFINE_URCU_TLS_GLOBAL(unsigned int, rcu_rand_yield);
#endif
static CDS_LIST_HEAD(registry);
void rcu_exit(void)
{
- struct sigaction act;
- int ret;
-
- ret = sigaction(SIGRCU, NULL, &act);
- if (ret)
- urcu_die(errno);
- assert(act.sa_sigaction == sigrcu_handler);
- assert(cds_list_empty(®istry));
+ /*
+ * Don't unregister the SIGRCU signal handler anymore, because
+ * call_rcu threads could still be using it shortly before the
+ * application exits.
+ * Assertion disabled because call_rcu threads are now rcu
+ * readers, and left running at exit.
+ * assert(cds_list_empty(®istry));
+ */
}
#endif /* #ifdef RCU_SIGNAL */