From: Richard Braun <rbr...@sceen.net> The function attempts to optimize this case by performing one IPC system call with the timeout included among the parameters, but in the absence of a reply, it will call mach_msg again with the same timeout later, effectively doubling the total timeout of the select/poll call.
Remove this optimization for the time being. * hurd/hurdselect.c (_hurd_select): Always call __io_select with no timeout. --- ChangeLog | 5 +++++ hurd/hurdselect.c | 5 +---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87d43d425e..06c8852c95 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2019-08-30 Richard Braun <rbr...@sceen.net> + + * hurd/hurdselect.c (_hurd_select): Always call __io_select with no + timeout. + 2019-08-29 Mihailo Stojanovic <mihailo.stojano...@rt-rk.com> * elf/dl-addr.c (determine_info): Calculate the symbol index diff --git a/hurd/hurdselect.c b/hurd/hurdselect.c index 6997b2b73b..a5e6e26b9a 100644 --- a/hurd/hurdselect.c +++ b/hurd/hurdselect.c @@ -236,10 +236,7 @@ _hurd_select (int nfds, { int type = d[i].type; d[i].reply_port = __mach_reply_port (); - err = __io_select (d[i].io_port, d[i].reply_port, - /* Poll only if there's a single descriptor. */ - (firstfd == lastfd) ? to : 0, - &type); + err = __io_select (d[i].io_port, d[i].reply_port, 0, &type); switch (err) { case MACH_RCV_TIMED_OUT: -- 2.23.0.rc1