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
path: root/winsup
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2006-05-21 21:27:14 +0400
committerChristopher Faylor <me@cgf.cx>2006-05-21 21:27:14 +0400
commit9c9959a5125dda20e76a4e4b36df9386a7b8740f (patch)
tree673f23b19af379fad27c4fdd7dbb7e888b435871 /winsup
parent8633e245b5c8177b6f31a08a726a297fd73f4ff7 (diff)
check in missing file
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/select.cc36
1 files changed, 25 insertions, 11 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index 9443ef28a..f03292fb9 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -648,7 +648,7 @@ thread_pipe (void *arg)
break;
Sleep (sleep_time >> 3);
if (sleep_time < 80)
- ++sleep_time;
+ ++sleep_time;
}
out:
return 0;
@@ -690,13 +690,27 @@ int
fhandler_pipe::ready_for_read (int fd, DWORD howlong)
{
int res;
- if (howlong)
- res = true;
- else
+ if (!howlong)
res = fhandler_base::ready_for_read (fd, howlong);
-
- if (res)
- get_guard ();
+ else if (!get_guard ())
+ res = 1;
+ else
+ {
+ const HANDLE w4[2] = {get_guard (), signal_arrived};
+ switch (WaitForMultipleObjects (2, w4, 0, INFINITE))
+ {
+ case WAIT_OBJECT_0:
+ res = 1;
+ break;
+ case WAIT_OBJECT_0 + 1:
+ set_sig_errno (EINTR);
+ res = 0;
+ break;
+ default:
+ __seterrno ();
+ res = 0;
+ }
+ }
return res;
}
@@ -1164,7 +1178,7 @@ fhandler_serial::select_except (select_record *s)
int
fhandler_base::ready_for_read (int fd, DWORD howlong)
{
- int avail = 0;
+ bool avail = false;
select_record me (this);
me.fd = fd;
while (!avail)
@@ -1175,7 +1189,7 @@ fhandler_base::ready_for_read (int fd, DWORD howlong)
if (fd >= 0 && cygheap->fdtab.not_open (fd))
{
set_sig_errno (EBADF);
- avail = 0;
+ avail = false;
break;
}
@@ -1190,7 +1204,7 @@ fhandler_base::ready_for_read (int fd, DWORD howlong)
{
debug_printf ("interrupted");
set_sig_errno (EINTR);
- avail = 0;
+ avail = false;
break;
}
}
@@ -1663,7 +1677,7 @@ thread_mailslot (void *arg)
break;
Sleep (sleep_time >> 3);
if (sleep_time < 80)
- ++sleep_time;
+ ++sleep_time;
}
out:
return 0;