From d4f824504896f9f9cccec941fca42bb2678eca95 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Wed, 7 Dec 2011 23:14:47 +0000 Subject: * select.cc (cygwin_select): Add common introducer and leaver debug output. (select_stuff::poll): Remove unneeded debugging. --- winsup/cygwin/ChangeLog | 6 ++++++ winsup/cygwin/select.cc | 26 +++++++++++++++++--------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index d91dd4b6d..beb1fd7b4 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2011-12-07 Christopher Faylor + + * select.cc (cygwin_select): Add common introducer and leaver debug + output. + (select_stuff::poll): Remove unneeded debugging. + 2011-12-07 Christopher Faylor * exceptions.cc (ctrl_c_handler): Remove _my_tls.remove since it can 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; } -- cgit v1.2.3