} else {
static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
if (ovsthread_once_start(&once)) {
- xpthread_create(NULL, NULL, ovsrcu_postpone_thread, NULL);
+ ovs_thread_create("urcu", ovsrcu_postpone_thread, NULL);
ovsthread_once_done(&once);
}
}
void
ovsrcu_quiesce(void)
{
+ ovsrcu_init();
ovsrcu_perthread_get()->seqno = seq_read(global_seqno);
seq_change(global_seqno);
ovsrcu_quiesced();
}
+bool
+ovsrcu_is_quiescent(void)
+{
+ ovsrcu_init();
+ return pthread_getspecific(perthread_key) == NULL;
+}
+
static void
ovsrcu_synchronize(void)
{