From: Mathieu Desnoyers Date: Thu, 9 Jun 2011 14:39:56 +0000 (-0400) Subject: call_rcu: handle retry without wait correctly X-Git-Tag: v0.6.0~25 X-Git-Url: http://git.liburcu.org/?a=commitdiff_plain;h=bc94ca9bada25f7403e3e859caa241146ae8e338;hp=bc94ca9bada25f7403e3e859caa241146ae8e338;p=userspace-rcu.git call_rcu: handle retry without wait correctly The wait scheme has an implementation problem: if the list is not empty when the !RT scheme checks for it, it will restart the loop and decrement the futex (again) without calling call_rcu_wait() (which would wait until it is set back to 0). So in this case, we can end up decrementing "futex" to values well below -1. Fix this by moving the decrement before the loop, and duplicate it after return from call_rcu_wait() + poll() delay. Also move the "set futex to 0 upon stopping" outside of the loop: this is the only way the loop can be stopped anyway. Signed-off-by: Mathieu Desnoyers ---