projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: move wait loop increment before first conditional block
[urcu.git]
/
urcu-qsbr.c
diff --git
a/urcu-qsbr.c
b/urcu-qsbr.c
index d3a6849ac04901097783fd0810b7a4aba4bf792c..a2cabb446afda2db312b6d42a00b8ea5f02a4769 100644
(file)
--- 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.
*/
* 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;
#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);
#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);
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)
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 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);
/*
if (wait_loops >= RCU_QS_ACTIVE_ATTEMPTS) {
uatomic_set(&gp_futex, -1);
/*
This page took
0.023822 seconds
and
4
git commands to generate.