diff options
author | Christopher Faylor <me@cgf.cx> | 2011-12-08 03:14:47 +0400 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2011-12-08 03:14:47 +0400 |
commit | d4f824504896f9f9cccec941fca42bb2678eca95 (patch) | |
tree | caf2a9deb7e0bac261cb0d17d39aab5900945674 /winsup/cygwin/select.cc | |
parent | 13b4946d2a974dc1accef5e1cc3d5417da595926 (diff) |
* select.cc (cygwin_select): Add common introducer and leaver debug output.
(select_stuff::poll): Remove unneeded debugging.
Diffstat (limited to 'winsup/cygwin/select.cc')
-rw-r--r-- | winsup/cygwin/select.cc | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index b8135954e..c60cd225f 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -94,7 +94,7 @@ cygwin_select (int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, fd_set *dummy_writefds = allocfd_set (maxfds); fd_set *dummy_exceptfds = allocfd_set (maxfds); - select_printf ("%d, %p, %p, %p, %p", maxfds, readfds, writefds, exceptfds, to); + select_printf ("select(%d, %p, %p, %p, %p)", maxfds, readfds, writefds, exceptfds, to); pthread_testcancel (); @@ -130,6 +130,7 @@ cygwin_select (int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, fd_set *w = allocfd_set (maxfds); fd_set *e = allocfd_set (maxfds); + int res = 1; /* Degenerate case. No fds to wait for. Just wait. */ if (sel.start.next == NULL) { @@ -146,17 +147,25 @@ cygwin_select (int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, default: break; } - timeout = 1; + res = 0; } else if (sel.always_ready || ms == 0) - /* Don't bother waiting. */; + res = 0; else if ((timeout = sel.wait (r, w, e, ms) < 0)) - return -1; /* some kind of error */ + res = -1; /* some kind of error */ - copyfd_set (readfds, r, maxfds); - copyfd_set (writefds, w, maxfds); - copyfd_set (exceptfds, e, maxfds); - return timeout ? 0 : sel.poll (readfds, writefds, exceptfds); + if (res >= 0) + { + copyfd_set (readfds, r, maxfds); + copyfd_set (writefds, w, maxfds); + copyfd_set (exceptfds, e, maxfds); + if (res > 0) + res = sel.poll (readfds, writefds, exceptfds); + } + + syscall_printf ("%R = select (%d, %p, %p, %p, %p)", res, maxfds, readfds, + writefds, exceptfds, to); + return res; } extern "C" int @@ -445,7 +454,6 @@ select_stuff::poll (fd_set *readfds, fd_set *writefds, fd_set *exceptfds) while ((s = s->next)) n += (!s->peek || s->peek (s, true)) ? set_bits (s, readfds, writefds, exceptfds) : 0; - select_printf ("returning %d", n); return n; } |