forked from pool/glibc
54 lines
1.9 KiB
Diff
54 lines
1.9 KiB
Diff
|
[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 \
|