]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Properly handle forced elision in pthread_mutex_trylock (bug 16657)
authorAndreas Schwab <schwab@suse.de>
Tue, 4 Mar 2014 12:00:26 +0000 (13:00 +0100)
committerAurelien Jarno <aurelien@aurel32.net>
Fri, 28 Aug 2015 19:44:41 +0000 (21:44 +0200)
(cherry picked from commit b0a3c1640ab2fb7d16d9b9a8d9c0e524e9cb0001)

ChangeLog
NEWS
nptl/pthread_mutex_trylock.c
nptl/sysdeps/unix/sysv/linux/x86/force-elision.h

index 0e15efb411dfda582be9566c31cca9d05e0790fd..b88cd041d3467bcba73ebd418838b767803856ba 100644 (file)
--- 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 24343f1b1636e24ef89fb4d2154ecc00d2e8f9f0..6f240cd5e72893bc5978fa1b56bf6f97ae9b1a5c 100644 (file)
--- 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
index 4d5f75d24f88e0696ba2339a3f74376325c5f21d..11573200b397657d7ce47c229c7e9a22036ee512 100644 (file)
@@ -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:
index 945f8867fc9f2fbf9b25d3532a40c8ef3e139868..a767cf1976262773a3f0da64cdb0c38faaf43f92 100644 (file)
    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                                          \