Hi all,

Task processes all its owned robust futex when it is exiting,
to ensure the futexes can be taken by other tasks.

Though this can not work good in sometimes.
Think about this scene:
1. A robust mutex is shared for two processes, each process has
   multi threads to lock the mutex.
2. One of the threads locks the mutex, and the others are waiting
   and sorted in order of priority.
3. The process to which the mutex owner thread belongs is dying
   without unlocking the mutex,and handle_futex_death is invoked
   to wake the first waiter.
4. If the first waiter belongs to the same process,it has no chance
   to return to the userspace to lock the mutex, and it won't wake
   the next waiter because it is not the owner of the mutex.
5. The rest waiters of the other process may block forever.

This patch remove the owner check when waking task in handle_futex_death.
If above occured, The dying task can wake the next waiter by processing its 
list_op_pending.
The waked task could return to userspace and try to lock the mutex again.


Signed-off-by: Zhang Yi <zhang.y...@zte.com.cn>
Reviewed-by: Xie Baoyou <xie.bao...@zte.com.cn>
Reviewed-by: Lu Zhongjun <lu.zhong...@zte.com.cn>



--- linux/kernel/futex.c        2013-09-25 09:24:34.639634244 +0000
+++ linux/kernel/futex.c        2013-09-25 10:12:17.619673546 +0000
@@ -2541,14 +2541,15 @@ retry:
                }
                if (nval != uval)
                        goto retry;
-
-               /*
-                * Wake robust non-PI futexes here. The wakeup of
-                * PI futexes happens in exit_pi_state():
-                */
-               if (!pi && (uval & FUTEX_WAITERS))
-                       futex_wake(uaddr, 1, 1, FUTEX_BITSET_MATCH_ANY);
        }
+
+       /*
+        * Wake robust non-PI futexes here. The wakeup of
+        * PI futexes happens in exit_pi_state():
+        */
+       if (!pi)
+               futex_wake(uaddr, 1, 1, FUTEX_BITSET_MATCH_ANY);
+
        return 0;
 }
N�Р骒r��y����b�X�肚�v�^�)藓{.n�+�伐�{��赙zXФ�≤�}��财�z�&j:+v�����赙zZ+��+zf"�h���~����i���z��wア�?�ㄨ��&�)撷f��^j谦y�m��@A�a囤�
0鹅h���i

Reply via email to