X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=urcu-qsbr.c;h=a2cabb446afda2db312b6d42a00b8ea5f02a4769;hb=ccdbf780e4c751ac1763eeb82b50ff98e0dd33d0;hp=d3a6849ac04901097783fd0810b7a4aba4bf792c;hpb=4a6d73787de534cbd7d5fc7a6b60af64de66e7ea;p=userspace-rcu.git diff --git a/urcu-qsbr.c b/urcu-qsbr.c index d3a6849..a2cabb4 100644 --- a/urcu-qsbr.c +++ b/urcu-qsbr.c @@ -69,11 +69,11 @@ unsigned long rcu_gp_ctr = RCU_GP_ONLINE; * Written to only by each individual reader. Read by both the reader and the * writers. */ -DEFINE_URCU_TLS(struct rcu_reader, rcu_reader); +__DEFINE_URCU_TLS_GLOBAL(struct rcu_reader, rcu_reader); #ifdef DEBUG_YIELD unsigned int yield_active; -DEFINE_URCU_TLS(unsigned int, rand_yield); +__DEFINE_URCU_TLS_GLOBAL(unsigned int, rand_yield); #endif static CDS_LIST_HEAD(registry); @@ -119,7 +119,7 @@ static void wait_gp(void) static void update_counter_and_wait(void) { CDS_LIST_HEAD(qsreaders); - int wait_loops = 0; + unsigned int wait_loops = 0; struct rcu_reader *index, *tmp; #if (CAA_BITS_PER_LONG < 64) @@ -150,7 +150,8 @@ static void update_counter_and_wait(void) * Wait for each thread rcu_reader_qs_gp count to become 0. */ for (;;) { - wait_loops++; + if (wait_loops < RCU_QS_ACTIVE_ATTEMPTS) + wait_loops++; if (wait_loops >= RCU_QS_ACTIVE_ATTEMPTS) { uatomic_set(&gp_futex, -1); /*