SHA256
3
0
forked from pool/glibc

Accepting request 229286 from home:Andreas_Schwab:Factory

- pthread-mutex-destroy.patch: Remove
- pthread-mutex-trylock-elision.patch: Properly handle forced elision in
  pthread_mutex_trylock (bnc#865968, BZ #16657)

OBS-URL: https://build.opensuse.org/request/show/229286
OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=358
This commit is contained in:
Andreas Schwab 2014-04-07 13:52:06 +00:00 committed by Git OBS Bridge
parent 006d01ca2c
commit 6addb61a16
8 changed files with 80 additions and 67 deletions

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Mon Apr 7 09:06:32 UTC 2014 - schwab@suse.de
- pthread-mutex-destroy.patch: Remove
- pthread-mutex-trylock-elision.patch: Properly handle forced elision in
pthread_mutex_trylock (bnc#865968, BZ #16657)
-------------------------------------------------------------------
Thu Apr 3 07:32:24 UTC 2014 - schwab@suse.de

View File

@ -260,8 +260,8 @@ Patch2001: resolv-dont-ignore-second-answer.patch
Patch2002: ldd-system-interp.patch
# PATCH-FIX-UPSTREAM Don't close or flush stdio streams on abort (BZ #15436)
Patch2003: abort-no-flush.patch
# PATCH-FIX-UPSTREAM Skip checks in pthread_mutex_destroy when doing elision
Patch2004: pthread-mutex-destroy.patch
# PATCH-FIX-UPSTREAM Properly handle forced elision in pthread_mutex_trylock (BZ #16657)
Patch2004: pthread-mutex-trylock-elision.patch
# PATCH-FIX-UPSTREAM Fix aarch64 setcontext clobbering alternate signal stack (BZ #16629)
Patch2005: aarch64-setcontext.patch

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Mon Apr 7 09:06:32 UTC 2014 - schwab@suse.de
- pthread-mutex-destroy.patch: Remove
- pthread-mutex-trylock-elision.patch: Properly handle forced elision in
pthread_mutex_trylock (bnc#865968, BZ #16657)
-------------------------------------------------------------------
Thu Apr 3 07:32:24 UTC 2014 - schwab@suse.de

View File

@ -259,8 +259,8 @@ Patch2001: resolv-dont-ignore-second-answer.patch
Patch2002: ldd-system-interp.patch
# PATCH-FIX-UPSTREAM Don't close or flush stdio streams on abort (BZ #15436)
Patch2003: abort-no-flush.patch
# PATCH-FIX-UPSTREAM Skip checks in pthread_mutex_destroy when doing elision
Patch2004: pthread-mutex-destroy.patch
# PATCH-FIX-UPSTREAM Properly handle forced elision in pthread_mutex_trylock (BZ #16657)
Patch2004: pthread-mutex-trylock-elision.patch
# PATCH-FIX-UPSTREAM Fix aarch64 setcontext clobbering alternate signal stack (BZ #16629)
Patch2005: aarch64-setcontext.patch

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Mon Apr 7 09:06:32 UTC 2014 - schwab@suse.de
- pthread-mutex-destroy.patch: Remove
- pthread-mutex-trylock-elision.patch: Properly handle forced elision in
pthread_mutex_trylock (bnc#865968, BZ #16657)
-------------------------------------------------------------------
Thu Apr 3 07:32:24 UTC 2014 - schwab@suse.de

View File

@ -260,8 +260,8 @@ Patch2001: resolv-dont-ignore-second-answer.patch
Patch2002: ldd-system-interp.patch
# PATCH-FIX-UPSTREAM Don't close or flush stdio streams on abort (BZ #15436)
Patch2003: abort-no-flush.patch
# PATCH-FIX-UPSTREAM Skip checks in pthread_mutex_destroy when doing elision
Patch2004: pthread-mutex-destroy.patch
# PATCH-FIX-UPSTREAM Properly handle forced elision in pthread_mutex_trylock (BZ #16657)
Patch2004: pthread-mutex-trylock-elision.patch
# PATCH-FIX-UPSTREAM Fix aarch64 setcontext clobbering alternate signal stack (BZ #16629)
Patch2005: aarch64-setcontext.patch

View File

@ -1,61 +0,0 @@
[PATCH] Skip checks in pthread_mutex_destroy when doing elision
When doing elisison the __nusers field is not updated, thus can have an
arbitrary value.
[BZ #16657]
* nptl/pthread_mutex_destroy.c (__pthread_mutex_destroy): Skip
checks when doing elision.
* nptl/sysdeps/unix/sysv/linux/x86/pthread_mutex_destroy.c: New file.
Index: glibc-2.18/nptl/pthread_mutex_destroy.c
===================================================================
--- glibc-2.18.orig/nptl/pthread_mutex_destroy.c
+++ glibc-2.18/nptl/pthread_mutex_destroy.c
@@ -21,6 +21,9 @@
#include <stap-probe.h>
+#ifndef DO_ELISION
+# define DO_ELISION(m) 0
+#endif
int
__pthread_mutex_destroy (mutex)
@@ -28,7 +31,8 @@ __pthread_mutex_destroy (mutex)
{
LIBC_PROBE (mutex_destroy, 1, mutex);
- if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
+ if (!DO_ELISION (mutex)
+ && (mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
&& mutex->__data.__nusers != 0)
return EBUSY;
Index: glibc-2.18/nptl/sysdeps/unix/sysv/linux/x86/pthread_mutex_destroy.c
===================================================================
--- /dev/null
+++ glibc-2.18/nptl/sysdeps/unix/sysv/linux/x86/pthread_mutex_destroy.c
@@ -0,0 +1,22 @@
+/* Elided version of pthread_mutex_destroy.
+ Copyright (C) 2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <elision-conf.h>
+#include "force-elision.h"
+
+#include "nptl/pthread_mutex_destroy.c"

View File

@ -0,0 +1,53 @@
[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 \