[PATCH] Properly handle forced elision in pthread_mutex_trylock BZ #16657 * pthread_mutex_trylock.c (__pthread_mutex_trylock): Use FORCE_ELISION instead of DO_ELISION. * sysdeps/unix/sysv/linux/x86/force-elision.h (DO_ELISION): Remove. --- nptl/pthread_mutex_trylock.c | 7 +++---- nptl/sysdeps/unix/sysv/linux/x86/force-elision.h | 5 ----- 2 files changed, 3 insertions(+), 9 deletions(-) Index: glibc-2.19/nptl/pthread_mutex_trylock.c =================================================================== --- glibc-2.19.orig/nptl/pthread_mutex_trylock.c +++ glibc-2.19/nptl/pthread_mutex_trylock.c @@ -26,8 +26,8 @@ #define lll_trylock_elision(a,t) lll_trylock(a) #endif -#ifndef DO_ELISION -#define DO_ELISION(m) 0 +#ifndef FORCE_ELISION +#define FORCE_ELISION(m, s) #endif /* We don't force elision in trylock, because this can lead to inconsistent @@ -77,8 +77,7 @@ __pthread_mutex_trylock (mutex) return 0; case PTHREAD_MUTEX_TIMED_NP: - if (DO_ELISION (mutex)) - goto elision; + FORCE_ELISION (mutex, goto elision); /*FALL THROUGH*/ case PTHREAD_MUTEX_ADAPTIVE_NP: case PTHREAD_MUTEX_ERRORCHECK_NP: Index: glibc-2.19/nptl/sysdeps/unix/sysv/linux/x86/force-elision.h =================================================================== --- glibc-2.19.orig/nptl/sysdeps/unix/sysv/linux/x86/force-elision.h +++ glibc-2.19/nptl/sysdeps/unix/sysv/linux/x86/force-elision.h @@ -16,11 +16,6 @@ License along with the GNU C Library; if not, see . */ -/* Check for elision on this lock without upgrading. */ -#define DO_ELISION(m) \ - (__pthread_force_elision \ - && (m->__data.__kind & PTHREAD_MUTEX_NO_ELISION_NP) == 0) \ - /* Automatically enable elision for existing user lock kinds. */ #define FORCE_ELISION(m, s) \ if (__pthread_force_elision \