urcu: fix compat_futex_noasync()
authorLai Jiangshan <laijs@cn.fujitsu.com>
Thu, 9 Aug 2012 14:19:14 +0000 (10:19 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 9 Aug 2012 14:21:02 +0000 (10:21 -0400)
commit5b80127fe2aa3defd8a82acec727be2fc885087a
tree729fc2accd30b10f40189dba1887fdc446b2c0f2
parentc85e62f37e4db48038e4494c202f5a2c923262f2
urcu: fix compat_futex_noasync()

This patch fix two critical problems in the compatibility fallback of
compact_futex_noasync():

1) compat_futex_cond is not bound to any @uaddr, it services all @uaddr,
   if you wakeup only one thread(pthread_cond_signal), the @uaddr of
   this waking thread and the @uaddr of the woken-up thread may be different.
   The woken-up thread will very probably go to sleep again
   because his own condition is not true.

   *And* this waking thread(FUTEX_WAKE) wake up NOTHING.

2) If the caller want to wake up all waiting threads, he will use INT_MAX
   for @val, and:
                for (i = 0; i < INT_MAX; i++)
                        pthread_cond_signal(&compat_futex_cond);
   becomes almost infinity loop.

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
compat_futex.c
This page took 0.025092 seconds and 4 git commands to generate.