mirror of git://sourceware.org/git/glibc.git
hurdselect: Let select get interrupted by signals
We need to set MACH_RCV_INTERRUPT to avoid __mach_msg just looping on signals, and then we can handle the interruption.
This commit is contained in:
parent
bd959902bc
commit
a9a002fb6c
|
@ -17,6 +17,8 @@
|
||||||
* hurd/hurd/resource.h (MACH_PRIORITY_TO_NICE,
|
* hurd/hurd/resource.h (MACH_PRIORITY_TO_NICE,
|
||||||
NICE_TO_MACH_PRIORITY): Align nice levels on Mach priorities from 5 to
|
NICE_TO_MACH_PRIORITY): Align nice levels on Mach priorities from 5 to
|
||||||
45.
|
45.
|
||||||
|
* hurd/hurdselect.c (_hurd_select): Pass MACH_RCV_INTERRUPT to
|
||||||
|
__mach_msg. If that returns MACH_RCV_INTERRUPTED, set ERR to EINTR.
|
||||||
|
|
||||||
2015-02-06 Roland McGrath <roland@hack.frob.com>
|
2015-02-06 Roland McGrath <roland@hack.frob.com>
|
||||||
|
|
||||||
|
|
|
@ -335,7 +335,7 @@ _hurd_select (int nfds,
|
||||||
mach_msg_option_t options = (timeout == NULL ? 0 : MACH_RCV_TIMEOUT);
|
mach_msg_option_t options = (timeout == NULL ? 0 : MACH_RCV_TIMEOUT);
|
||||||
error_t msgerr;
|
error_t msgerr;
|
||||||
while ((msgerr = __mach_msg (&msg.head,
|
while ((msgerr = __mach_msg (&msg.head,
|
||||||
MACH_RCV_MSG | options,
|
MACH_RCV_MSG | MACH_RCV_INTERRUPT | options,
|
||||||
0, sizeof msg, portset, to,
|
0, sizeof msg, portset, to,
|
||||||
MACH_PORT_NULL)) == MACH_MSG_SUCCESS)
|
MACH_PORT_NULL)) == MACH_MSG_SUCCESS)
|
||||||
{
|
{
|
||||||
|
@ -414,6 +414,9 @@ _hurd_select (int nfds,
|
||||||
effect a poll, so ERR is MACH_RCV_TIMED_OUT when the poll finds no
|
effect a poll, so ERR is MACH_RCV_TIMED_OUT when the poll finds no
|
||||||
message waiting. */
|
message waiting. */
|
||||||
err = 0;
|
err = 0;
|
||||||
|
if (msgerr == MACH_RCV_INTERRUPTED)
|
||||||
|
/* Interruption on our side (e.g. signal reception). */
|
||||||
|
err = EINTR;
|
||||||
|
|
||||||
if (got)
|
if (got)
|
||||||
/* At least one descriptor is known to be ready now, so we will
|
/* At least one descriptor is known to be ready now, so we will
|
||||||
|
|
Loading…
Reference in New Issue