Messages in this thread | | | Date | Wed, 6 Mar 2002 17:52:03 -0800 | From | Richard Henderson <> | Subject | Re: [PATCH] Fast Userspace Mutexes III. |
| |
On Mon, Mar 04, 2002 at 02:55:36PM +1100, Rusty Russell wrote: > + /* If we take the semaphore from 1 to 0, it's ours. */ > + while (!atomic_dec_and_test(count)) { > + if (signal_pending(current)) { > + retval = -EINTR; > + break;
This is not safe from wraparound. Let one thread hold the lock forever; let other threads keep trying to take the lock while periodically getting SIGALRM. Eventually one of the spinning threads will incorrectly acquire the mutex.
On sparc32, atomic_t is only 24 bits wide, so it wouldn't take very long at all to wrap. It's slightly longer for the other platforms, but it can still happen. And note that even 64-bit platforms may be using a 32-bit atomic_t.
You really do need that cmpxchg loop.
r~ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |