diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2019-02-24 01:02:44 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2019-02-24 01:02:44 +0300 |
commit | 0fb41d48aa3b0e8637a783961ffe4d67911fec50 (patch) | |
tree | 854b06c76cd26827bbea2d77cab6d571131f3147 | |
parent | bcb33dc4f0552e749dcb6c44e1ef7815b5db75a1 (diff) |
Cygwin: timerfd: fix select always returning immediately
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r-- | winsup/cygwin/select.cc | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index d6757e4ed..59325860d 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -1871,6 +1871,26 @@ fhandler_signalfd::select_except (select_stuff *stuff) return s; } +static int +peek_timerfd (select_record *me, bool) +{ + if (WaitForSingleObject (me->h, 0) == WAIT_OBJECT_0) + { + select_printf ("timerfd %d ready", me->fd); + me->read_ready = true; + return 1; + } + select_printf ("timerfd %d not ready", me->fd); + return 0; +} + +static int +verify_timerfd (select_record *me, fd_set *rfds, fd_set *wfds, + fd_set *efds) +{ + return peek_timerfd (me, true); +} + select_record * fhandler_timerfd::select_read (select_stuff *stuff) { @@ -1878,11 +1898,12 @@ fhandler_timerfd::select_read (select_stuff *stuff) if (!s->startup) { s->startup = no_startup; - s->verify = verify_ok; + s->verify = verify_timerfd; } s->h = get_timerfd_handle (); + s->peek = peek_timerfd; s->read_selected = true; - s->read_ready = true; + s->read_ready = false; return s; } |