Add randomness to yield debug test
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mon, 9 Feb 2009 00:21:34 +0000 (19:21 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mon, 9 Feb 2009 00:21:34 +0000 (19:21 -0500)
Add randomness to allow 1/2 odds that the yield will be done.
This lets some paths go quickly and others not.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
urcu.c
urcu.h

diff --git a/urcu.c b/urcu.c
index 4362217d49ab4020c0bd199c30410733f32bbd89..83d2fe4d6d9c367796d123fb05286f8305dfc332 100644 (file)
--- a/urcu.c
+++ b/urcu.c
@@ -33,7 +33,8 @@ struct reader_data {
 };
 
 #ifdef DEBUG_YIELD
-int yield_active;
+unsigned int yield_active;
+unsigned int __thread rand_yield;
 #endif
 
 static struct reader_data *reader_data;
diff --git a/urcu.h b/urcu.h
index 2aa35977036d9432884206983c21b6bc686b9cf0..c77b26f958e34b8521f1b8363d83b6492cb46b0f 100644 (file)
--- a/urcu.h
+++ b/urcu.h
@@ -72,18 +72,26 @@ static inline void atomic_inc(int *v)
 #define YIELD_READ     (1 << 0)
 #define YIELD_WRITE    (1 << 1)
 
-extern int yield_active;
+extern unsigned int yield_active;
+extern unsigned int __thread rand_yield;
 
 static inline void debug_yield_read(void)
 {
        if (yield_active & YIELD_READ)
-               sched_yield();
+               if (rand_r(&rand_yield) & 0x1)
+                       sched_yield();
 }
 
 static inline void debug_yield_write(void)
 {
        if (yield_active & YIELD_WRITE)
-               sched_yield();
+               if (rand_r(&rand_yield) & 0x1)
+                       sched_yield();
+}
+
+static inline void debug_yield_init(void)
+{
+       rand_yield = time(NULL) ^ pthread_self();
 }
 #else
 static inline void debug_yield_read(void)
@@ -92,6 +100,11 @@ static inline void debug_yield_read(void)
 
 static inline void debug_yield_write(void)
 {
+}
+
+static inline void debug_yield_init(void)
+{
+
 }
 #endif
 
This page took 0.030717 seconds and 4 git commands to generate.