Index: linux-2.6.16/kernel/futex.c =================================================================== --- linux-2.6.16.orig/kernel/futex.c 2006-06-09 01:15:28.000000000 +0530 +++ linux-2.6.16/kernel/futex.c 2006-06-09 01:18:07.000000000 +0530 @@ -358,14 +358,17 @@ if (!atomic_dec_and_test(&pi_state->refcount)) return; - WARN_ON(!pi_state->owner); - WARN_ON(!rt_mutex_is_locked(&pi_state->pi_mutex)); - - spin_lock_irq(&pi_state->owner->pi_lock); - list_del_init(&pi_state->list); - spin_unlock_irq(&pi_state->owner->pi_lock); + /* + * If pi_state->owner is NULL, the owner is most probably dying + * and has cleaned up the pi_state already + */ + if (pi_state->owner) { + spin_lock_irq(&pi_state->owner->pi_lock); + list_del_init(&pi_state->list); + spin_unlock_irq(&pi_state->owner->pi_lock); - rt_mutex_proxy_unlock(&pi_state->pi_mutex, pi_state->owner); + rt_mutex_proxy_unlock(&pi_state->pi_mutex, pi_state->owner); + } if (current->pi_state_cache) kfree(pi_state);