struct rcu_head rh;
enum writer_state writer_state = WRITER_STATE_SYNC_RCU;
+ rcu_register_thread();
+
+ /* Offline for poll. */
+ put_thread_offline();
while (goflag == GOFLAG_INIT)
(void) poll(NULL, 0, 1);
+ put_thread_online();
+
while (goflag == GOFLAG_RUN) {
i = rcu_stress_idx + 1;
if (i >= RCU_STRESS_PIPE_LEN)
strerror(errno));
abort();
}
- rcu_register_thread();
call_rcu(&rh, rcu_update_stress_test_rcu);
- rcu_unregister_thread();
+
/*
* Our MacOS X test machine with the following
* config:
* us to be registered RCU readers).
*/
call_rcu_wait = true;
+ /* Offline for pthread_cond_wait. */
+ put_thread_offline();
do {
ret = pthread_cond_wait(&call_rcu_test_cond,
&call_rcu_test_mutex);
} while (call_rcu_wait);
+ put_thread_online();
if (ret) {
errno = ret;
diag("pthread_cond_signal: %s",
{
struct urcu_gp_poll_state poll_state;
- rcu_register_thread();
poll_state = start_poll_synchronize_rcu();
- rcu_unregister_thread();
+
+ /* 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;
}
}
advance_writer_state(&writer_state);
}
+ rcu_unregister_thread();
+
return NULL;
}