This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[hurd,commited] hurd: Fix _hurd_select for single fd sets
- From: Samuel Thibault <samuel dot thibault at ens-lyon dot org>
- To: libc-alpha at sourceware dot org
- Cc: Richard Braun <rbraun at sceen dot net>, commit-hurd at gnu dot org
- Date: Fri, 30 Aug 2019 01:01:46 +0200
- Subject: [hurd,commited] hurd: Fix _hurd_select for single fd sets
From: Richard Braun <rbraun@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 <rbraun@sceen.net>
+
+ * hurd/hurdselect.c (_hurd_select): Always call __io_select with no
+ timeout.
+
2019-08-29 Mihailo Stojanovic <mihailo.stojanovic@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