You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by bj...@apache.org on 2001/08/18 06:36:49 UTC
cvs commit: apr/network_io/os2 poll.c
bjh 01/08/17 21:36:49
Modified: network_io/os2 poll.c
Log:
OS/2: Simplify & standardize apr_poll(), we usually want it to return if
interrupted.
Revision Changes Path
1.24 +16 -18 apr/network_io/os2/poll.c
Index: poll.c
===================================================================
RCS file: /home/cvs/apr/network_io/os2/poll.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- poll.c 2001/08/10 21:04:48 1.23
+++ poll.c 2001/08/18 04:36:48 1.24
@@ -129,28 +129,26 @@
{
int i;
int rv = 0;
- apr_time_t starttime = apr_time_now();
- do {
- for (i=0; i<pollfdset->num_total; i++) {
- pollfdset->r_socket_list[i] = pollfdset->socket_list[i];
- }
-
- rv = select(pollfdset->r_socket_list,
- pollfdset->num_read,
- pollfdset->num_write,
- pollfdset->num_except,
- timeout >= 0 ? timeout / 1000 : -1);
+ for (i=0; i<pollfdset->num_total; i++) {
+ pollfdset->r_socket_list[i] = pollfdset->socket_list[i];
+ }
- if (rv < 0 && sock_errno() == SOCEINTR && timeout >= 0 ) {
- apr_interval_time_t elapsed = apr_time_now() - starttime;
+ rv = select(pollfdset->r_socket_list,
+ pollfdset->num_read,
+ pollfdset->num_write,
+ pollfdset->num_except,
+ timeout >= 0 ? timeout / 1000 : -1);
- if (timeout <= elapsed)
- break;
-
- timeout -= elapsed;
+ /* select() doesn't wipe the socket list in the case of a timeout or
+ * interrupt. This prevents false positives from revents_get
+ */
+ if (rv == 0) {
+ for (i=0; i<pollfdset->num_total; i++) {
+ pollfdset->r_socket_list[i] = -1;
}
- } while ( rv < 0 && sock_errno() == SOCEINTR );
+ return APR_TIMEUP;
+ }
(*nsds) = rv;
return rv < 0 ? APR_OS2_STATUS(sock_errno()) : APR_SUCCESS;