- smp_mb();
- need_mb = 0;
- smp_mb();
-}
-
-/*
- * urcu_init constructor. Called when the library is linked, but also when
- * reader threads are calling rcu_register_thread().
- * Should only be called by a single thread at a given time. This is ensured by
- * holing the internal_urcu_lock() from rcu_register_thread() or by running at
- * library load time, which should not be executed by multiple threads nor
- * concurrently with rcu_register_thread() anyway.
- */
-void urcu_init(void)
-{
- struct sigaction act;
- int ret;
-
- if (init_done)
- return;
- init_done = 1;
-
- act.sa_sigaction = sigurcu_handler;
- ret = sigaction(SIGURCU, &act, NULL);
- if (ret) {
- perror("Error in sigaction");
- exit(-1);
- }
-}
-
-void urcu_exit(void)
-{
- struct sigaction act;
- int ret;
-
- ret = sigaction(SIGURCU, NULL, &act);
- if (ret) {
- perror("Error in sigaction");
- exit(-1);
- }
- assert(act.sa_sigaction == sigurcu_handler);
- free(registry);