diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2016-01-11 10:36:33 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2016-01-11 10:36:33 +0100 |
commit | 20ddde2f552afedf7ef662bb21fec7a56f50040f (patch) | |
tree | 70093ce9b837a394de3732504cd5298b4584391f | |
parent | e3b230b04375164631a04c6ba49978ead3581353 (diff) | |
download | cygnal-20ddde2f552afedf7ef662bb21fec7a56f50040f.tar.gz cygnal-20ddde2f552afedf7ef662bb21fec7a56f50040f.tar.bz2 cygnal-20ddde2f552afedf7ef662bb21fec7a56f50040f.zip |
select(2): Drop checking descriptors in case of immediate timeout.
* select.cc (select): Call sel.poll only if sel.wait returned
select_ok.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r-- | winsup/cygwin/select.cc | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index b4c37783a..fa6859c59 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -189,12 +189,17 @@ select (int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, UNIX_FD_ZERO (readfds, maxfds); UNIX_FD_ZERO (writefds, maxfds); UNIX_FD_ZERO (exceptfds, maxfds); - /* Set bit mask from sel records even in case of a timeout so we - don't miss one. This also sets ret to the right value >= 0, - matching the number of bits set in the fds records. */ - ret = sel.poll (readfds, writefds, exceptfds); - if (!ret && res != select_stuff::select_set_zero) - res = select_stuff::select_loop; + if (res == select_stuff::select_set_zero) + ret = 0; + else + { + /* Set bit mask from sel records. This also sets ret to the + right value >= 0, matching the number of bits set in the + fds records. if ret is 0, continue to loop. */ + ret = sel.poll (readfds, writefds, exceptfds); + if (!ret) + res = select_stuff::select_loop; + } } /* Always clean up everything here. If we're looping then build it all up again. */ |