X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=urcu.h;h=c4a7992b4b7b166d527411d4ae5108cac174fc95;hp=03764ab33dbe241b643b72ef9cbfd6757662fa3b;hb=9598a4814c854780e9ca9bb2cfff8d77442c3db6;hpb=bb48818526ec4317f9e6daeb0aa1cd64d528f754 diff --git a/urcu.h b/urcu.h index 03764ab..c4a7992 100644 --- a/urcu.h +++ b/urcu.h @@ -207,10 +207,14 @@ static inline int rcu_old_gp_ongoing(long *value) if (value == NULL) return 0; debug_yield_write(); + /* + * Make sure both tests below are done on the same version of *value + * to insure consistency. + */ v = ACCESS_ONCE(*value); debug_yield_write(); return (v & RCU_GP_CTR_NEST_MASK) && - ((v ^ ACCESS_ONCE(urcu_gp_ctr)) & RCU_GP_CTR_BIT); + ((v ^ urcu_gp_ctr) & RCU_GP_CTR_BIT); } static inline void rcu_read_lock(void)