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 <aure...@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.thiba...@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 -- To UNSUBSCRIBE, email to debian-glibc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/e1xvo8j-0007td...@moszumanska.debian.org