forked from pool/glibc
Andreas Schwab
352e35f701
- powerpc-opt-power8.patch: readd POWER8 implementation of isnan, isinf, finite with fix for little endian - pthread-mutex-destroy.patch: Skip checks in pthread_mutex_destroy when doing elision (bnc#865968) OBS-URL: https://build.opensuse.org/request/show/228349 OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=347
62 lines
2.1 KiB
Diff
62 lines
2.1 KiB
Diff
[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"
|