On Wed, 02/11 18:14, Paolo Bonzini wrote: > Always process them within half a second. Even though waiting a little > is useful, it is not okay to delay e.g. qemu_opts_del forever. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > util/rcu.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/util/rcu.c b/util/rcu.c > index c9c3e6e..486d7b6 100644 > --- a/util/rcu.c > +++ b/util/rcu.c > @@ -223,14 +223,16 @@ static void *call_rcu_thread(void *opaque) > * Fetch rcu_call_count now, we only must process elements that were > * added before synchronize_rcu() starts. > */ > - while (n < RCU_CALL_MIN_SIZE && ++tries <= 5) { > - g_usleep(100000); > - qemu_event_reset(&rcu_call_ready_event); > - n = atomic_read(&rcu_call_count); > - if (n < RCU_CALL_MIN_SIZE) { > - qemu_event_wait(&rcu_call_ready_event); > + while (n == 0 || (n < RCU_CALL_MIN_SIZE && ++tries <= 5)) { > + g_usleep(10000); > + if (n == 0) { > + qemu_event_reset(&rcu_call_ready_event); > n = atomic_read(&rcu_call_count); > + if (n == 0) { > + qemu_event_wait(&rcu_call_ready_event); > + } > } > + n = atomic_read(&rcu_call_count); > } > > atomic_sub(&rcu_call_count, n);
Reviewed-by: Fam Zheng <f...@redhat.com>