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

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



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 <adconrad@0c3.net>  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


Reply to: