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 15:29:32 UTC

svn commit: r1755769 - in /apr/apr/branches/1.5.x: ./ poll/unix/epoll.c poll/unix/kqueue.c poll/unix/poll.c poll/unix/port.c poll/unix/select.c

Author: ylavic
Date: Wed Aug 10 15:29:32 2016
New Revision: 1755769

URL: http://svn.apache.org/viewvc?rev=1755769&view=rev
Log:
Merge r1671389, r1671513, r1755758 from trunk:

poll() implementation of apr_pollset_poll(): Return APR_EINTR as appropriate.
(APR_SUCCESS was returned instead in that scenario.)


[Note backport: the below is a partial revert only]
Revert r1671389; apr_pollset_poll() should return APR_SUCCESS
and the real event if a real event occurs AND apr_pollset_wakeup()
is called before apr_pollset_poll() is called and/or awakened.


apr_pollset_poll(): don't return a positive (nay negative in case of error)
number of descriptors/events, before the returned descriptors are actually
initialized.


Submitted by: trawick, ylavic

Modified:
    apr/apr/branches/1.5.x/   (props changed)
    apr/apr/branches/1.5.x/poll/unix/epoll.c
    apr/apr/branches/1.5.x/poll/unix/kqueue.c
    apr/apr/branches/1.5.x/poll/unix/poll.c
    apr/apr/branches/1.5.x/poll/unix/port.c
    apr/apr/branches/1.5.x/poll/unix/select.c

Propchange: apr/apr/branches/1.5.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Aug 10 15:29:32 2016
@@ -1,4 +1,4 @@
 /apr/apr/branches/1.4.x:1003369,1101301
 /apr/apr/branches/1.6.x:1593600,1593612,1648831,1666812,1696141,1696768,1722549,1722558
-/apr/apr/trunk:733052,739635,746310,747990,748080,748361,748371,748565,748888,748902,748988,749810,760443,767895,775683,782838,783398,783958,784633,784773,788588,789050,793192-793193,794118,794485,795267,799497,800627,809745,809854,810472,811455,813063,821306,829490,831641,832904,835607,888669,892028,892159,892909,896382,896653,908427,910419,910597,917819,917837-917838,923311,923320,925965,929796,931973,951771,960665,960671,979891,983618,989450,990435,1003338,1044440,1044447,1055657,1072165,1078845,1081462,1081495,1083038,1083242,1084662,1086695,1088023,1089031,1089129,1089438,1099348,1103310,1183683,1183685-1183686,1183688,1183693,1183698,1213382,1235047,1236970,1237078,1237507,1240472,1340286,1340288,1340470,1341193,1341196,1343233,1343243,1367050,1368819,1370494,1372018,1372022,1372093,1372849,1376957,1384764,1389077,1400200,1402868,1405985,1406690,1420106,1420109,1425356,1428809,1438940,1438958-1438959,1442903,1449568,1456418,1459994,1460179,1460241,1460399,1460405,1462738,14628
 13,1470186,1470348,1475509,1478905,1480067,1481262,1481265,1484271,1487796,1489517,1496407,1502804,1510354,1516261,1523384,1523479,1523484,1523505,1523521,1523604,1523613,1523615,1523844-1523845,1523853,1524014,1524031,1528797,1528809,1529488,1529495,1529515,1529521,1529668,1530786,1530800,1530988,1531554,1531768,1531884,1532022,1533104,1533111,1533979,1535027,1535157,1536744,1538171,1539374,1539389,1539455,1539603,1541054,1541061,1541486,1541655,1541666,1541744,1542601,1542779,1543033,1543056,1548575,1550907,1551650,1551659,1558905,1559382,1559873,1559975,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587063,1587545,1589982,1593611,1604596,1604598,1610854,1611004,1611023,1611107,1611110,1611120,1611125,1611184,1611193,1611466,1626564,1634615,1642159,1646891-1646893,1646895,1648830,1664406,1664447,1664451,1664471,1664769,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667914-1667916,1671329,1671356,1671514,1672354,1672366,16
 72495,1672575,1675644,1675656,1675668,1676013,1685929,1696140,1696767,1722547,1722557,1733694,1733708,1736552,1750374,1755740,1755746
+/apr/apr/trunk:733052,739635,746310,747990,748080,748361,748371,748565,748888,748902,748988,749810,760443,767895,775683,782838,783398,783958,784633,784773,788588,789050,793192-793193,794118,794485,795267,799497,800627,809745,809854,810472,811455,813063,821306,829490,831641,832904,835607,888669,892028,892159,892909,896382,896653,908427,910419,910597,917819,917837-917838,923311,923320,925965,929796,931973,951771,960665,960671,979891,983618,989450,990435,1003338,1044440,1044447,1055657,1072165,1078845,1081462,1081495,1083038,1083242,1084662,1086695,1088023,1089031,1089129,1089438,1099348,1103310,1183683,1183685-1183686,1183688,1183693,1183698,1213382,1235047,1236970,1237078,1237507,1240472,1340286,1340288,1340470,1341193,1341196,1343233,1343243,1367050,1368819,1370494,1372018,1372022,1372093,1372849,1376957,1384764,1389077,1400200,1402868,1405985,1406690,1420106,1420109,1425356,1428809,1438940,1438958-1438959,1442903,1449568,1456418,1459994,1460179,1460241,1460399,1460405,1462738,14628
 13,1470186,1470348,1475509,1478905,1480067,1481262,1481265,1484271,1487796,1489517,1496407,1502804,1510354,1516261,1523384,1523479,1523484,1523505,1523521,1523604,1523613,1523615,1523844-1523845,1523853,1524014,1524031,1528797,1528809,1529488,1529495,1529515,1529521,1529668,1530786,1530800,1530988,1531554,1531768,1531884,1532022,1533104,1533111,1533979,1535027,1535157,1536744,1538171,1539374,1539389,1539455,1539603,1541054,1541061,1541486,1541655,1541666,1541744,1542601,1542779,1543033,1543056,1548575,1550907,1551650,1551659,1558905,1559382,1559873,1559975,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587063,1587545,1589982,1593611,1604596,1604598,1610854,1611004,1611023,1611107,1611110,1611120,1611125,1611184,1611193,1611466,1626564,1634615,1642159,1646891-1646893,1646895,1648830,1664406,1664447,1664451,1664471,1664769,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667914-1667916,1671329,1671356,1671389,1671513-1671514,16
 72354,1672366,1672495,1672575,1675644,1675656,1675668,1676013,1685929,1696140,1696767,1722547,1722557,1733694,1733708,1736552,1750374,1755740,1755746,1755758
 /apr/apr/trunk/test/testnames.c:1460405

Modified: apr/apr/branches/1.5.x/poll/unix/epoll.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.5.x/poll/unix/epoll.c?rev=1755769&r1=1755768&r2=1755769&view=diff
==============================================================================
--- apr/apr/branches/1.5.x/poll/unix/epoll.c (original)
+++ apr/apr/branches/1.5.x/poll/unix/epoll.c Wed Aug 10 15:29:32 2016
@@ -259,14 +259,14 @@ static apr_status_t impl_pollset_poll(ap
     apr_status_t rv = APR_SUCCESS;
     apr_pollfd_t *fdptr;
 
+    *num = 0;
+
     if (timeout > 0) {
         timeout /= 1000;
     }
 
     ret = epoll_wait(pollset->p->epoll_fd, pollset->p->pollset, pollset->nalloc,
                      timeout);
-    (*num) = ret;
-
     if (ret < 0) {
         rv = apr_get_netos_error();
     }

Modified: apr/apr/branches/1.5.x/poll/unix/kqueue.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.5.x/poll/unix/kqueue.c?rev=1755769&r1=1755768&r2=1755769&view=diff
==============================================================================
--- apr/apr/branches/1.5.x/poll/unix/kqueue.c (original)
+++ apr/apr/branches/1.5.x/poll/unix/kqueue.c Wed Aug 10 15:29:32 2016
@@ -259,6 +259,8 @@ static apr_status_t impl_pollset_poll(ap
     apr_status_t rv = APR_SUCCESS;
     apr_pollfd_t fd;
 
+    *num = 0;
+
     if (timeout < 0) {
         tvptr = NULL;
     }
@@ -270,7 +272,6 @@ static apr_status_t impl_pollset_poll(ap
 
     ret = kevent(pollset->p->kqueue_fd, NULL, 0, pollset->p->ke_set,
                  pollset->p->setsize, tvptr);
-    (*num) = ret;
     if (ret < 0) {
         rv = apr_get_netos_error();
     }

Modified: apr/apr/branches/1.5.x/poll/unix/poll.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.5.x/poll/unix/poll.c?rev=1755769&r1=1755768&r2=1755769&view=diff
==============================================================================
--- apr/apr/branches/1.5.x/poll/unix/poll.c (original)
+++ apr/apr/branches/1.5.x/poll/unix/poll.c Wed Aug 10 15:29:32 2016
@@ -241,10 +241,11 @@ static apr_status_t impl_pollset_poll(ap
     int ret;
     apr_status_t rv = APR_SUCCESS;
 
+    *num = 0;
+
 #ifdef WIN32
     /* WSAPoll() requires at least one socket. */
     if (pollset->nelts == 0) {
-        *num = 0;
         if (timeout > 0) {
             apr_sleep(timeout);
             return APR_TIMEUP;
@@ -261,7 +262,6 @@ static apr_status_t impl_pollset_poll(ap
     }
     ret = poll(pollset->p->pollset, pollset->nelts, timeout);
 #endif
-    (*num) = ret;
     if (ret < 0) {
         return apr_get_netos_error();
     }
@@ -290,8 +290,9 @@ static apr_status_t impl_pollset_poll(ap
                 }
             }
         }
-        if (((*num) = j) > 0)
+        if ((*num = j)) { /* any event besides wakeup pipe? */
             rv = APR_SUCCESS;
+        }
     }
     if (descriptors && (*num))
         *descriptors = pollset->p->result_set;

Modified: apr/apr/branches/1.5.x/poll/unix/port.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.5.x/poll/unix/port.c?rev=1755769&r1=1755768&r2=1755769&view=diff
==============================================================================
--- apr/apr/branches/1.5.x/poll/unix/port.c (original)
+++ apr/apr/branches/1.5.x/poll/unix/port.c Wed Aug 10 15:29:32 2016
@@ -360,6 +360,7 @@ static apr_status_t impl_pollset_poll(ap
     apr_status_t rv = APR_SUCCESS;
     apr_pollfd_t fp;
 
+    *num = 0;
     nget = 1;
 
     pollset_lock_rings();
@@ -403,7 +404,6 @@ static apr_status_t impl_pollset_poll(ap
        port_associate within apr_pollset_add() */
     apr_atomic_dec32(&pollset->p->waiting);
 
-    (*num) = nget;
     if (nget) {
 
         pollset_lock_rings();

Modified: apr/apr/branches/1.5.x/poll/unix/select.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.5.x/poll/unix/select.c?rev=1755769&r1=1755768&r2=1755769&view=diff
==============================================================================
--- apr/apr/branches/1.5.x/poll/unix/select.c (original)
+++ apr/apr/branches/1.5.x/poll/unix/select.c Wed Aug 10 15:29:32 2016
@@ -347,13 +347,14 @@ static apr_status_t impl_pollset_poll(ap
     fd_set readset, writeset, exceptset;
     apr_status_t rv = APR_SUCCESS;
 
+    *num = 0;
+
 #ifdef WIN32
     /* On Win32, select() must be presented with at least one socket to
      * poll on, or select() will return WSAEINVAL.  So, we'll just
      * short-circuit and bail now.
      */
     if (pollset->nelts == 0) {
-        (*num) = 0;
         if (timeout > 0) {
             apr_sleep(timeout);
             return APR_TIMEUP;
@@ -385,7 +386,6 @@ static apr_status_t impl_pollset_poll(ap
         rs = select(pollset->p->maxfd + 1, &readset, &writeset, &exceptset,
                     tvptr);
 
-    (*num) = rs;
     if (rs < 0) {
         return apr_get_netos_error();
     }