You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by yl...@apache.org on 2016/08/10 13:27:01 UTC

svn commit: r1755740 - /apr/apr/trunk/poll/os2/pollset.c

Author: ylavic
Date: Wed Aug 10 13:27:00 2016
New Revision: 1755740

URL: http://svn.apache.org/viewvc?rev=1755740&view=rev
Log:
apr_pollset_poll(): OS/2: follow up to r923311.
Don't return APR_EINTR (woken up) unless we actually read something on the
wakeup pipe (which we must drain), and also return APR_SUCCESS if at least
some other event is available simultaneously.


Modified:
    apr/apr/trunk/poll/os2/pollset.c

Modified: apr/apr/trunk/poll/os2/pollset.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/poll/os2/pollset.c?rev=1755740&r1=1755739&r2=1755740&view=diff
==============================================================================
--- apr/apr/trunk/poll/os2/pollset.c (original)
+++ apr/apr/trunk/poll/os2/pollset.c Wed Aug 10 13:27:00 2016
@@ -266,15 +266,25 @@ APR_DECLARE(apr_status_t) apr_pollset_po
                 struct apr_sockaddr_t from_addr;
                 char buffer[16];
                 apr_size_t buflen;
-                rc = APR_EINTR;
-
-                do {
+                for (;;) {
                     buflen = sizeof(buffer);
-                } while (apr_socket_recvfrom(&from_addr, pollset->wake_listen, MSG_DONTWAIT, buffer, &buflen) == APR_SUCCESS);
+                    rv = apr_socket_recvfrom(&from_addr, pollset->wake_listen,
+                                             MSG_DONTWAIT, buffer, &buflen);
+                    if (rv != APR_SUCCESS) {
+                        break;
+                    }
+                    /* Woken up, drain the pipe still. */
+                    rc = APR_EINTR;
+                    if (buflen < sizeof(buf)) {
+                        break;
+                    }
+                }
             }
             else {
                 pollset->result_set[*num] = pollset->query_set[i];
                 pollset->result_set[*num].rtnevents = rtnevents;
+                /* Event(s) besides wakeup pipe. */
+                rc = APR_SUCCESS;
                 (*num)++;
             }
         }