Author: sthibault
Date: 2013-01-05 16:08:33 +0000 (Sat, 05 Jan 2013)
New Revision: 5435

Added:
   glibc-package/trunk/debian/patches/hurd-i386/unsubmitted-select-EINTR.diff
Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/series
Log:
patches/hurd-i386/unsubmitted-select-EINTR.diff: Fix select vs signals.


Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog        2013-01-05 02:32:43 UTC (rev 
5434)
+++ glibc-package/trunk/debian/changelog        2013-01-05 16:08:33 UTC (rev 
5435)
@@ -4,6 +4,7 @@
 
   [ Samuel Thibault ]
   * patches/hurd-i386/unsubmitted-setitimer_fix.diff: Finish fixing setitimer.
+  * patches/hurd-i386/unsubmitted-select-EINTR.diff: Fix select vs signals.
 
  -- Adam Conrad <[email protected]>  Sun, 30 Dec 2012 10:22:43 -0700
 

Added: 
glibc-package/trunk/debian/patches/hurd-i386/unsubmitted-select-EINTR.diff
===================================================================
--- glibc-package/trunk/debian/patches/hurd-i386/unsubmitted-select-EINTR.diff  
                        (rev 0)
+++ glibc-package/trunk/debian/patches/hurd-i386/unsubmitted-select-EINTR.diff  
2013-01-05 16:08:33 UTC (rev 5435)
@@ -0,0 +1,30 @@
+We need to set MACH_RCV_INTERRUPT to avoid __mach_msg looping on signals, and
+then handle the interruption.
+
+---
+ hurdselect.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/hurd/hurdselect.c b/hurd/hurdselect.c
+index 21ba5f4..8fb2931 100644
+--- a/hurd/hurdselect.c
++++ b/hurd/hurdselect.c
+@@ -335,7 +335,7 @@ _hurd_select (int nfds,
+       mach_msg_option_t options = (timeout == NULL ? 0 : MACH_RCV_TIMEOUT);
+       error_t msgerr;
+       while ((msgerr = __mach_msg (&msg.head,
+-                                 MACH_RCV_MSG | options,
++                                 MACH_RCV_MSG | MACH_RCV_INTERRUPT | options,
+                                  0, sizeof msg, portset, to,
+                                  MACH_PORT_NULL)) == MACH_MSG_SUCCESS)
+       {
+@@ -407,6 +407,9 @@ _hurd_select (int nfds,
+          effect a poll, so ERR is MACH_RCV_TIMED_OUT when the poll finds no
+          message waiting.  */
+       err = 0;
++      if (msgerr == MACH_RCV_INTERRUPTED)
++      /* Interruption on our side (e.g. signal reception).  */
++      err = EINTR;
+ 
+       if (got)
+       /* At least one descriptor is known to be ready now, so we will

Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series   2013-01-05 02:32:43 UTC (rev 
5434)
+++ glibc-package/trunk/debian/patches/series   2013-01-05 16:08:33 UTC (rev 
5435)
@@ -214,6 +214,7 @@
 hurd-i386/tg-hurdsig-boot-fix.diff
 hurd-i386/unsubmitted-single-hurdselect-timeout.diff
 hurd-i386/unsubmitted-setitimer_fix.diff
+hurd-i386/unsubmitted-select-EINTR.diff
 
 kfreebsd/submitted-libc_once.diff
 kfreebsd/local-getaddrinfo-freebsd-kernel.diff


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: http://lists.debian.org/[email protected]

Reply via email to