From: Andreas Schwab Date: Tue, 4 Mar 2014 12:00:26 +0000 (+0100) Subject: Properly handle forced elision in pthread_mutex_trylock (bug 16657) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=323e41a8d8168dac0338bf95c12a8de5b0dfc56e;p=thirdparty%2Fglibc.git Properly handle forced elision in pthread_mutex_trylock (bug 16657) (cherry picked from commit b0a3c1640ab2fb7d16d9b9a8d9c0e524e9cb0001) --- diff --git a/ChangeLog b/ChangeLog index 0e15efb411d..b88cd041d34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2014-12-11 Andreas Schwab + + [BZ #16657] + * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock): Use + FORCE_ELISION instead of DO_ELISION. + * nptl/sysdeps/unix/sysv/linux/x86/force-elision.h (DO_ELISION): + Remove. + 2013-07-29 Adhemerval Zanella [BZ #17213] diff --git a/NEWS b/NEWS index 24343f1b163..6f240cd5e72 100644 --- a/NEWS +++ b/NEWS @@ -9,8 +9,8 @@ Version 2.19.1 * The following bugs are resolved with this release: - 15946, 16545, 16574, 16623, 16695, 16878, 16882, 16885, 16916, 16932, - 16943, 16958, 17048, 17069, 17137, 17213, 17263, 17325, 17555. + 15946, 16545, 16574, 16623, 16657, 16695, 16878, 16882, 16885, 16916, + 16932, 16943, 16958, 17048, 17069, 17137, 17213, 17263, 17325, 17555. * Reverted change of ABI data structures for s390 and s390x: On s390 and s390x the size of struct ucontext and jmp_buf was increased in diff --git a/nptl/pthread_mutex_trylock.c b/nptl/pthread_mutex_trylock.c index 4d5f75d24f8..11573200b39 100644 --- a/nptl/pthread_mutex_trylock.c +++ b/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 @@ -69,7 +69,7 @@ __pthread_mutex_trylock (mutex) break; case PTHREAD_MUTEX_TIMED_ELISION_NP: - elision: + elision: __attribute__((unused)) if (lll_trylock_elision (mutex->__data.__lock, mutex->__data.__elision) != 0) break; @@ -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: diff --git a/nptl/sysdeps/unix/sysv/linux/x86/force-elision.h b/nptl/sysdeps/unix/sysv/linux/x86/force-elision.h index 945f8867fc9..a767cf19762 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86/force-elision.h +++ b/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 \