- if (pthread_cond_wait(&call_rcu_test_cond,
- &call_rcu_test_mutex) != 0) {
- perror("pthread_cond_wait");
- exit(-1);
+ rcu_unregister_thread();
+ /*
+ * Our MacOS X test machine with the following
+ * config:
+ * 15.6.0 Darwin Kernel Version 15.6.0
+ * root:xnu-3248.60.10~1/RELEASE_X86_64
+ * appears to have issues with liburcu-signal
+ * signal being delivered on top of
+ * pthread_cond_wait. It seems to make the
+ * thread continue, and therefore corrupt the
+ * rcu_head. Work around this issue by
+ * unregistering the RCU read-side thread
+ * immediately after call_rcu (call_rcu needs
+ * us to be registered RCU readers).
+ */
+ ret = pthread_cond_wait(&call_rcu_test_cond,
+ &call_rcu_test_mutex);
+ if (ret) {
+ errno = ret;
+ diag("pthread_cond_signal: %s",
+ strerror(errno));
+ abort();