urcu.git
15 years agoDo two parity flip in the writer to fix race condition
Paul E. McKenney [Sun, 8 Feb 2009 00:00:55 +0000 (19:00 -0500)] 
Do two parity flip in the writer to fix race condition

On Sat, Feb 07, 2009 at 07:10:28AM -0800, Paul E. McKenney wrote:
> So, how to fix?  Here are some approaches:
>
> o     Make urcu_publish_content() do two parity flips rather than one.
>       I use this approach in my rcu_rcpg, rcu_rcpl, and rcu_rcpls
>       algorithms in CodeSamples/defer.
>
> o     Use a single free-running counter, in a manner similar to rcu_nest,
>       as suggested earlier.  This one is interesting, as I rely on a
>       read-side memory barrier to handle the long-preemption case.
>       However, if you believe that any thread that waits several minutes
>       between executing adjacent instructions must have been preempted
>       (which the memory barriers that are required to do a context
>       switch), then a compiler barrier suffices.  ;-)
>
> Of course, the probability of seeing this failure during test is quite
> low, since it is unlikely that thread 0 would run just long enough to
> execute its signal handler.  However, it could happen.  And if you were
> to adapt this algorithm for use in a real-time application, then priority
> boosting could cause this to happen naturally.

And here is a patch, taking the first approach.  It also exposes a
synchronize_rcu() API that is used by the existing urcu_publish_content()
API.  This allows easier handling of structures that are referenced by
more than one pointer.  And should also allow to be more easily plugged
into my rcutorture test.  ;-)

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agotest_urcu.c: use gettid()
Bert Wesarg [Sat, 7 Feb 2009 23:59:29 +0000 (18:59 -0500)] 
test_urcu.c: use gettid()

It's probably better to print the tid for each thread, not the pid.

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
15 years agoURCU : use pthread_equal()
Bert Wesarg [Fri, 6 Feb 2009 11:45:42 +0000 (06:45 -0500)] 
URCU : use pthread_equal()

But you should use pthread_equal() for you equality test of pthread_t.

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoRun longer tests
Mathieu Desnoyers [Fri, 6 Feb 2009 11:13:49 +0000 (06:13 -0500)] 
Run longer tests

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
15 years agoupdate Makefile, -Wall
Mathieu Desnoyers [Fri, 6 Feb 2009 03:25:51 +0000 (22:25 -0500)] 
update Makefile, -Wall

15 years agoremove ugly gcc warning removal ack, simply cast the caller parameter
Mathieu Desnoyers [Fri, 6 Feb 2009 02:47:01 +0000 (21:47 -0500)] 
remove ugly gcc warning removal ack, simply cast the caller parameter

15 years agoadd acknowledgements, fix gcc warnings
Mathieu Desnoyers [Fri, 6 Feb 2009 02:41:04 +0000 (21:41 -0500)] 
add acknowledgements, fix gcc warnings

15 years agofix wait_for_quiescent_state
Mathieu Desnoyers [Fri, 6 Feb 2009 02:14:20 +0000 (21:14 -0500)] 
fix wait_for_quiescent_state

15 years agoadd licensing
Mathieu Desnoyers [Fri, 6 Feb 2009 01:49:36 +0000 (20:49 -0500)] 
add licensing

15 years agomodify test values
Mathieu Desnoyers [Fri, 6 Feb 2009 01:46:14 +0000 (20:46 -0500)] 
modify test values

15 years agoruns
Mathieu Desnoyers [Fri, 6 Feb 2009 01:04:29 +0000 (20:04 -0500)] 
runs

15 years agoruns
Mathieu Desnoyers [Fri, 6 Feb 2009 01:04:03 +0000 (20:04 -0500)] 
runs

15 years agoadd make clean
Mathieu Desnoyers [Fri, 6 Feb 2009 00:42:15 +0000 (19:42 -0500)] 
add make clean

15 years agoruns
Mathieu Desnoyers [Fri, 6 Feb 2009 00:41:34 +0000 (19:41 -0500)] 
runs

15 years agocompile
Mathieu Desnoyers [Fri, 6 Feb 2009 00:16:25 +0000 (19:16 -0500)] 
compile

15 years agoinit version
Mathieu Desnoyers [Fri, 6 Feb 2009 00:06:44 +0000 (19:06 -0500)] 
init version

This page took 0.026959 seconds and 4 git commands to generate.