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

r6260 - in glibc-package/trunk/debian: . patches patches/hurd-i386



Author: sthibault
Date: 2014-08-27 22:56:50 +0000 (Wed, 27 Aug 2014)
New Revision: 6260

Added:
   glibc-package/trunk/debian/patches/hurd-i386/tg-fork_ss_hang.diff
Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/series
Log:
patches/hurd-i386/tg-fork_ss_hang.diff: New patch which fixes some dash hangs.


Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog	2014-08-27 22:56:00 UTC (rev 6259)
+++ glibc-package/trunk/debian/changelog	2014-08-27 22:56:50 UTC (rev 6260)
@@ -5,6 +5,8 @@
     overzealous assertions.
   * patches/hurd-i386/submitted-bind_umask.diff: Split into cvs-bind_umask.diff
     and submitted-bind_umask2.diff as requested by upstream.
+  * patches/hurd-i386/tg-fork_ss_hang.diff: New patch which fixes some dash
+    hangs.
 
  -- Aurelien Jarno <aurel32@debian.org>  Wed, 27 Aug 2014 08:22:41 +0200
 

Added: glibc-package/trunk/debian/patches/hurd-i386/tg-fork_ss_hang.diff
===================================================================
--- glibc-package/trunk/debian/patches/hurd-i386/tg-fork_ss_hang.diff	                        (rev 0)
+++ glibc-package/trunk/debian/patches/hurd-i386/tg-fork_ss_hang.diff	2014-08-27 22:56:50 UTC (rev 6260)
@@ -0,0 +1,31 @@
+From: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Subject: [PATCH] Fix hang on fork
+
+If e.g. a signal is being received while we are running fork(), the signal
+thread may be having our ss lock when we make the space copy, and thus in the
+child we can not take the ss lock any more.
+
+* sysdeps/mach/hurd/fork.c (__fork): Lock SS->lock around __proc_dostop() call.
+
+Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+---
+ sysdeps/mach/hurd/fork.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/sysdeps/mach/hurd/fork.c
++++ b/sysdeps/mach/hurd/fork.c
+@@ -130,9 +130,13 @@ __fork (void)
+       ports_locked = 1;
+ 
+ 
++      /* Keep our SS locked while stopping other threads, so they don't get a
++       * chance to be having it locked in the copied space.  */
++      __spin_lock(&ss->lock);
+       /* Stop all other threads while copying the address space,
+ 	 so nothing changes.  */
+       err = __proc_dostop (_hurd_ports[INIT_PORT_PROC].port, ss->thread);
++      __spin_unlock(&ss->lock);
+       if (!err)
+ 	{
+ 	  stopped = 1;

Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series	2014-08-27 22:56:00 UTC (rev 6259)
+++ glibc-package/trunk/debian/patches/series	2014-08-27 22:56:50 UTC (rev 6260)
@@ -151,6 +151,7 @@
 hurd-i386/cvs-libpthread_std_thread.diff
 hurd-i386/cvs-bind_umask.diff
 hurd-i386/submitted-bind_umask2.diff
+hurd-i386/tg-fork_ss_hang.diff
 
 i386/local-biarch.diff
 i386/local-cmov.diff


Reply to: