File pthread-mutex-trylock-elision.patch of Package glibc.8004

[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
    <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						\
openSUSE Build Service is sponsored by