X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=urcu-qsbr.c;h=1dc99792d7a49f2f6f3614693e34cde239312bfb;hb=158cf657906dce346cb7197b1e9ce7f12076f5e8;hp=5e4348449ca9183b61bf1cbc6a041a549f784c2b;hpb=01dbfa62037e08aa2d08ab0e721267ccdd99b947;p=userspace-rcu.git diff --git a/urcu-qsbr.c b/urcu-qsbr.c index 5e43484..1dc9979 100644 --- a/urcu-qsbr.c +++ b/urcu-qsbr.c @@ -218,8 +218,11 @@ void synchronize_rcu(void) * our own quiescent state. This allows using synchronize_rcu() * in threads registered as readers. */ - if (was_online) + if (was_online) { CMM_STORE_SHARED(rcu_reader.ctr, 0); + cmm_smp_mb(); /* write rcu_reader.ctr before read futex */ + wake_up_gp(); + } mutex_lock(&rcu_gp_lock); @@ -277,8 +280,11 @@ void synchronize_rcu(void) * in threads registered as readers. */ cmm_smp_mb(); - if (was_online) + if (was_online) { CMM_STORE_SHARED(rcu_reader.ctr, 0); + cmm_smp_mb(); /* write rcu_reader.ctr before read futex */ + wake_up_gp(); + } mutex_lock(&rcu_gp_lock); if (cds_list_empty(®istry))