Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2011-12-08 03:14:47 +0400
committerChristopher Faylor <me@cgf.cx>2011-12-08 03:14:47 +0400
commitd4f824504896f9f9cccec941fca42bb2678eca95 (patch)
treecaf2a9deb7e0bac261cb0d17d39aab5900945674
parent13b4946d2a974dc1accef5e1cc3d5417da595926 (diff)
* select.cc (cygwin_select): Add common introducer and leaver debug output.
(select_stuff::poll): Remove unneeded debugging.
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/select.cc26
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,5 +1,11 @@
2011-12-07 Christopher Faylor <me.cygwin2011@cgf.cx>
+ * select.cc (cygwin_select): Add common introducer and leaver debug
+ output.
+ (select_stuff::poll): Remove unneeded debugging.
+
+2011-12-07 Christopher Faylor <me.cygwin2011@cgf.cx>
+
* exceptions.cc (ctrl_c_handler): Remove _my_tls.remove since it can
cause deadlocks during exec and will eventually be handled anyway.
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;
}