diff --git a/ChangeLog b/ChangeLog index 79255d3795..7d23aa7236 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ 2018-10-28 Samuel Thibault * hurd/hurdsig.c (_hurd_interrupted_rpc_timeout): Set to 60000. + * hurd/intr-msg.c (_hurd_intr_rpc_mach_msg): When the server does not + answer to interrupt_operation, return EIO instead of EINTR. 2018-10-26 Joseph Myers diff --git a/hurd/intr-msg.c b/hurd/intr-msg.c index 2f83ac6ce7..1f7724ee8b 100644 --- a/hurd/intr-msg.c +++ b/hurd/intr-msg.c @@ -141,7 +141,7 @@ _hurd_intr_rpc_mach_msg (mach_msg_header_t *msg, else /* The operation was supposedly interrupted, but still has not returned. Declare it interrupted. */ - goto interrupted; + goto dead; case MACH_SEND_INTERRUPTED: /* RPC didn't get out. */ if (!(option & MACH_SEND_MSG)) @@ -324,17 +324,21 @@ _hurd_intr_rpc_mach_msg (mach_msg_header_t *msg, timeout = user_timeout; goto message; } - /* FALLTHROUGH */ + err = EINTR; + + /* The EINTR return indicates cancellation, so clear the flag. */ + ss->cancel = 0; + break; case MACH_RCV_PORT_DIED: /* Server didn't respond to interrupt_operation, so the signal thread destroyed the reply port. */ /* FALLTHROUGH */ - interrupted: - err = EINTR; + dead: + err = EIO; - /* The EINTR return indicates cancellation, so clear the flag. */ + /* The EIO return indicates cancellation, so clear the flag. */ ss->cancel = 0; break;