]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
hurd: Fix _hurd_select for single fd sets
authorRichard Braun <rbraun@sceen.net>
Thu, 29 Aug 2019 22:58:14 +0000 (00:58 +0200)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Thu, 29 Aug 2019 22:59:10 +0000 (00:59 +0200)
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
hurd/hurdselect.c

index 87d43d425e9331696bc935d150ac053b560c297a..06c8852c958ab3f7308b676508fb510cd6bf4bab 100644 (file)
--- 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
index 6997b2b73b995aef2c228c26f580e750ba8600b8..a5e6e26b9a4e2a9d0a0b936774ae0951dc6ba74e 100644 (file)
@@ -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: