commit cfafcd117 "futex: Rework futex_lock_pi() to use rt_mutex_*_proxy_lock()" causes glibc nptl/tst-robustpi8 failure

From: Markus Trippelsdorf
Date: Wed May 17 2017 - 13:36:59 EST


Since:
commit cfafcd117da0216520568c195cb2f6cd1980c4bb
Author: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Date: Wed Mar 22 11:35:58 2017 +0100

futex: Rework futex_lock_pi() to use rt_mutex_*_proxy_lock()

glibc's nptl/tst-robustpi8 testcase fails:

glibc-build % ./nptl/tst-robustpi8
tst-robustpi8: ../nptl/pthread_mutex_lock.c:424: __pthread_mutex_lock_full: Assertion `INTERNAL_SYSCALL_ERRNO (e, __err) != ESRCH || !robust' failed.

pthread_mutex_lock.c:
415 if (INTERNAL_SYSCALL_ERROR_P (e, __err)
416 && (INTERNAL_SYSCALL_ERRNO (e, __err) == ESRCH
417 || INTERNAL_SYSCALL_ERRNO (e, __err) == EDEADLK))
418 {
419 assert (INTERNAL_SYSCALL_ERRNO (e, __err) != EDEADLK
420 || (kind != PTHREAD_MUTEX_ERRORCHECK_NP
421 && kind != PTHREAD_MUTEX_RECURSIVE_NP));
422 /* ESRCH can happen only for non-robust PI mutexes where
423 the owner of the lock died. */
424 assert (INTERNAL_SYSCALL_ERRNO (e, __err) != ESRCH || !robust);

During bisection the commit above hangs the machine when I run the
testcase.

See: https://sourceware.org/bugzilla/show_bug.cgi?id=21487

--
Markus