Re: [BUG] futex_unlock_pi() hurts my brain and may cause application deadlock

From: Ulrich Drepper
Date: Thu May 31 2007 - 10:54:00 EST


On 5/30/07, Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:
> if (!(uval & FUTEX_OWNER_DIED)) {
> pagefault_disable();
> uval = futex_atomic_cmpxchg_inatomic(uaddr, current->pid, 0);
> pagefault_enable();
> }
[...]
This code is in futex_unlock_pi. Can the owner of the mutex really die?
Isn't the owner the one doing the unlock?

This is part of the implementation of robust PI futexes. The
semantics is that if the owner of a robust futex dies the futex is
marked with FUTEX_OWNER_DIED. The next locking thread then has to
clear that bit before calling pthread_mutex_unlock. If the bit is
still set while unlocking the mutex is permanently marked unusable. I
cannot say right now whether this is the semantics implemented above.
I'll have to check the glibc test suite whether we check for that
semantic.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/