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: