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

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



Author: sthibault
Date: 2014-08-27 19:49:47 +0000 (Wed, 27 Aug 2014)
New Revision: 6256

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 against two other overzealous assertions.


Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog	2014-08-27 19:48:27 UTC (rev 6255)
+++ glibc-package/trunk/debian/changelog	2014-08-27 19:49:47 UTC (rev 6256)
@@ -1,6 +1,8 @@
 glibc (2.19-11) UNRELEASED; urgency=medium
 
-  * 
+  [ Samuel Thibault ]
+  * patches/hurd-i386/tg-thread-cancel.diff: Update patch against two other
+    overzealous assertions.
 
  -- Aurelien Jarno <aurel32@debian.org>  Wed, 27 Aug 2014 08:22:41 +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-08-27 19:48:27 UTC (rev 6255)
+++ glibc-package/trunk/debian/patches/hurd-i386/tg-thread-cancel.diff	2014-08-27 19:49:47 UTC (rev 6256)
@@ -1,8 +1,23 @@
 From: Samuel Thibault <samuel.thibault@ens-lyon.org>
 Subject: [PATCH] The critical section lock _can_ be held in these place.
 
-At least since hurd_thread_cancel can be called by another thread.
+At least since hurd_thread_cancel can be called by another thread and lock our
+critical lock.
 
+http://bugs.debian.org/46859
+
+“
+Thomas suggested that there is no need to take the critical section
+lock.  I believe that taking the critical section lock is necessary to
+prevent the target thread from entering a signal handler.  Roland will
+look into the problem.
+”
+
+Taking the critical section lock makes these assertions bogus.
+
+It happens that hurd_thread_cancel is only called from libports and inside
+/hurd/term so this is rare in practice.
+
 2006-08-05  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
        * hurd/thread-cancel.c (hurd_thread_cancel): Do not assert that
@@ -11,13 +26,26 @@
        * sysdeps/mach/hurd/spawni.c (__spawni): Likewise.
 
 ---
- hurd/thread-cancel.c |    1 -
+ hurd/hurdexec.c                | 1 -
+ hurd/thread-cancel.c           | 2 --
  sysdeps/mach/hurd/jmp-unwind.c | 1 -
  sysdeps/mach/hurd/spawni.c     | 1 -
- 3 files changed, 3 deletions(-)
+ 4 files changed, 5 deletions(-)
 
+diff --git a/hurd/hurdexec.c b/hurd/hurdexec.c
+index 0ced7f3..1de90c0 100644
+--- a/hurd/hurdexec.c
++++ b/hurd/hurdexec.c
+@@ -104,7 +104,6 @@ _hurd_exec (task_t task, file_t file,
+ 
+   ss = _hurd_self_sigstate ();
+ 
+-  assert (! __spin_lock_locked (&ss->critical_section_lock));
+   __spin_lock (&ss->critical_section_lock);
+ 
+   __spin_lock (&ss->lock);
 diff --git a/hurd/thread-cancel.c b/hurd/thread-cancel.c
-index c7f88ee..2e8d91e 100644
+index c7f88ee..eaf3d9e 100644
 --- a/hurd/thread-cancel.c
 +++ b/hurd/thread-cancel.c
 @@ -51,7 +51,6 @@ hurd_thread_cancel (thread_t thread)
@@ -28,6 +56,14 @@
    __spin_lock (&ss->critical_section_lock);
    __spin_lock (&ss->lock);
    err = __thread_suspend (thread);
+@@ -91,7 +90,6 @@ hurd_check_cancel (void)
+   int cancel;
+ 
+   __spin_lock (&ss->lock);
+-  assert (! __spin_lock_locked (&ss->critical_section_lock));
+   cancel = ss->cancel;
+   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
 --- a/sysdeps/mach/hurd/jmp-unwind.c


Reply to: