[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: