X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=urcu-qsbr.c;h=c678d38779eb683f1f78872a87e853a4c281f43d;hp=25074d09063a60ae5c94a17b18cd9d241b1e2fb9;hb=935b11ff4cf9053954d21b9d63c4ee367b12a652;hpb=7a5a38f52b8814d0188b74a91cb635bc205df96c diff --git a/urcu-qsbr.c b/urcu-qsbr.c index 25074d0..c678d38 100644 --- a/urcu-qsbr.c +++ b/urcu-qsbr.c @@ -124,8 +124,12 @@ static void update_counter_and_wait(void) * Enforce compiler-order of store to rcu_gp_ctr before before * load rcu_reader ctr. * This ensures synchronize_rcu() cannot be starved by readers. + * + * Adding a smp_mb() which is _not_ formally required, but makes the + * model easier to understand. It does not have a big performance impact + * anyway, given this is the write-side. */ - barrier(); + smp_mb(); /* * Wait for each thread rcu_reader_qs_gp count to become 0.