r6275 - in glibc-package/trunk/debian: . patches/hurd-i386
Author: sthibault
Date: 2014-09-21 20:53:23 +0000 (Sun, 21 Sep 2014)
New Revision: 6275
Modified:
glibc-package/trunk/debian/changelog
glibc-package/trunk/debian/patches/hurd-i386/tg-thread-cancel.diff
Log:
patches/hurd-i386/tg-thread-cancel.diff: Update patch from upstream, fixes a rare deadlock.
Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog 2014-09-21 20:52:35 UTC (rev 6274)
+++ glibc-package/trunk/debian/changelog 2014-09-21 20:53:23 UTC (rev 6275)
@@ -1,6 +1,8 @@
glibc (2.19-12) UNRELEASED; urgency=medium
- *
+ [ Samuel Thibault ]
+ * patches/hurd-i386/tg-thread-cancel.diff: Update patch from upstream, fixes
+ a rare deadlock.
-- Aurelien Jarno <aurel32@debian.org> Sat, 13 Sep 2014 07:22:45 +0200
Modified: glibc-package/trunk/debian/patches/hurd-i386/tg-thread-cancel.diff
===================================================================
--- glibc-package/trunk/debian/patches/hurd-i386/tg-thread-cancel.diff 2014-09-21 20:52:35 UTC (rev 6274)
+++ glibc-package/trunk/debian/patches/hurd-i386/tg-thread-cancel.diff 2014-09-21 20:53:23 UTC (rev 6275)
@@ -18,19 +18,24 @@
It happens that hurd_thread_cancel is only called from libports and inside
/hurd/term so this is rare in practice.
+A reproducer can be found here:
+
+http://lists.gnu.org/archive/html/bug-hurd/2014-05/msg00025.html
+
2006-08-05 Samuel Thibault <samuel.thibault@ens-lyon.org>
* hurd/thread-cancel.c (hurd_thread_cancel): Do not assert that
`&ss->critical_section_lock' is unlocked.
- * sysdeps/mach/hurd/jmp-unwind.c (_longjmp_unwind): Likewise.
+ * sysdeps/mach/hurd/jmp-unwind.c (_longjmp_unwind): Likewise, and take
+ critical section lock before taking the sigstate lock.
* sysdeps/mach/hurd/spawni.c (__spawni): Likewise.
---
hurd/hurdexec.c | 1 -
hurd/thread-cancel.c | 2 --
- sysdeps/mach/hurd/jmp-unwind.c | 1 -
+ sysdeps/mach/hurd/jmp-unwind.c | 3 +--
sysdeps/mach/hurd/spawni.c | 1 -
- 4 files changed, 5 deletions(-)
+ 4 files changed, 1 insertion(+), 6 deletions(-)
diff --git a/hurd/hurdexec.c b/hurd/hurdexec.c
index 0ced7f3..1de90c0 100644
@@ -65,17 +70,20 @@
ss->cancel = 0;
__spin_unlock (&ss->lock);
diff --git a/sysdeps/mach/hurd/jmp-unwind.c b/sysdeps/mach/hurd/jmp-unwind.c
-index bdc24b9..d199682 100644
+index bdc24b9..0422d9e 100644
--- a/sysdeps/mach/hurd/jmp-unwind.c
+++ b/sysdeps/mach/hurd/jmp-unwind.c
-@@ -50,7 +50,6 @@ _longjmp_unwind (jmp_buf env, int val)
+@@ -49,9 +49,8 @@ _longjmp_unwind (jmp_buf env, int val)
+
/* All access to SS->active_resources must take place inside a critical
section where signal handlers cannot run. */
- __spin_lock (&ss->lock);
+- __spin_lock (&ss->lock);
- assert (! __spin_lock_locked (&ss->critical_section_lock));
__spin_lock (&ss->critical_section_lock);
++ __spin_lock (&ss->lock);
/* Remove local signal preemptors being unwound past. */
+ while (ss->preemptors &&
diff --git a/sysdeps/mach/hurd/spawni.c b/sysdeps/mach/hurd/spawni.c
index 867579d..bcd06dd 100644
--- a/sysdeps/mach/hurd/spawni.c
Reply to: