- 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();
- }
- ret = pthread_mutex_unlock(&call_rcu_test_mutex);
- if (ret) {
- errno = ret;
- diag("pthread_mutex_unlock: %s",
- strerror(errno));
- abort();
- }
+
+ /* Offline for busy-wait. */
+ put_thread_offline();
+ urcu_adaptative_busy_wait(&wait);
+ put_thread_online();
+ break;
+ }
+ case WRITER_STATE_POLL_RCU:
+ {
+ struct urcu_gp_poll_state poll_state;
+
+ poll_state = start_poll_synchronize_rcu();
+
+ /* Offline for poll. */
+ put_thread_offline();
+ while (!poll_state_synchronize_rcu(poll_state))
+ (void) poll(NULL, 0, 1); /* Wait for 1ms */
+ put_thread_online();
+ break;