diff options
author | Andreas Schwab <schwab@suse.de> | 2014-03-04 13:00:26 +0100 |
---|---|---|
committer | Aurelien Jarno <aurelien@aurel32.net> | 2015-08-28 21:44:41 +0200 |
commit | 323e41a8d8168dac0338bf95c12a8de5b0dfc56e (patch) | |
tree | 7be8ae2e9bba051296f2459cba051f9c46a24412 | |
parent | 980a63b384df3086b2969b9f7e8dd2f016caa78c (diff) | |
download | glibc-323e41a8d8168dac0338bf95c12a8de5b0dfc56e.tar.gz glibc-323e41a8d8168dac0338bf95c12a8de5b0dfc56e.tar.xz glibc-323e41a8d8168dac0338bf95c12a8de5b0dfc56e.zip |
Properly handle forced elision in pthread_mutex_trylock (bug 16657)
(cherry picked from commit b0a3c1640ab2fb7d16d9b9a8d9c0e524e9cb0001)
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | nptl/pthread_mutex_trylock.c | 9 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86/force-elision.h | 5 |
4 files changed, 14 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog index 0e15efb411..b88cd041d3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2014-12-11 Andreas Schwab <schwab@suse.de> + + [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 <azanella@linux.vnet.ibm.com> [BZ #17213] diff --git a/NEWS b/NEWS index 24343f1b16..6f240cd5e7 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 4d5f75d24f..11573200b3 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 945f8867fc..a767cf1976 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 <http://www.gnu.org/licenses/>. */ -/* 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 \ |