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 2019/03/22 13:21:27 UTC

svn commit: r1856051 - in /apr/apr/branches/1.7.x: ./ build/ build/apr_threads.m4 configure.in locks/unix/proc_mutex.c

Author: ylavic
Date: Fri Mar 22 13:21:27 2019
New Revision: 1856051

URL: http://svn.apache.org/viewvc?rev=1856051&view=rev
Log:
Merge r1856022 from trunk:

Use proc mutex pthread by default when robust[_np]

On platforms that support pshared and robust pthread mutex, this is usually
the best interprocess mutex mechanism because it's efficient, posix, not
limited and not persistent on the system when the program exits (i.e. no need
to delete it explicitely before leaving, like IPC SysV or files for instance).

Note that on older POSIX systems pthread_mutex_{setrobust,consistent}() funcs
existed with the non-posix _np() suffix, and we consider them equivalent.

Modified:
    apr/apr/branches/1.7.x/   (props changed)
    apr/apr/branches/1.7.x/build/   (props changed)
    apr/apr/branches/1.7.x/build/apr_threads.m4
    apr/apr/branches/1.7.x/configure.in
    apr/apr/branches/1.7.x/locks/unix/proc_mutex.c

Propchange: apr/apr/branches/1.7.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Mar 22 13:21:27 2019
@@ -1,4 +1,4 @@
 /apr/apr/branches/1.4.x:1003369,1101301
-/apr/apr/trunk:733052,739635,741862,741866-741867,741869,741871,745763-745764,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,892435,892909,896382,896653,899905,901088,902077,902090,908427,910419,910597,917819,917837-917838,923311,923320,925965,929796,930508,931973,932585,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,143
 8940,1438957-1438959,1442903,1449568,1456418,1459994,1460179-1460180,1460241,1460399,1460405,1462738,1462813,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,1534882,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,1561040,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587045,1587063,1587543,1587545,1588878,1588937,1589982,1593611,1593614-1593615,1593680,1594684,1594708,1595549,1597797,1597803,1604590,1604596,1604598,1605104,1610854,1611023,1611107,1611110,1611117,1611120,1611125,1611184,
 1611193,1611466,1611515,1611517,1625173,1626564,1634615,1642159,1648830,1664406,1664447,1664451,1664471,1664769-1664770,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667420-1667421,1667423,1667900-1667901,1667903,1667914-1667916,1667962,1669077,1671292,1671329,1671356,1671386,1671389,1671513-1671514,1671957,1672354,1672366,1672495,1672575,1675644,1675656,1675668,1676013,1683521,1685929,1696140,1696767,1722547,1722557,1726928,1727020,1727160,1727175,1727199,1728957,1732582,1733451,1733594,1733694,1733706,1733708,1733775,1734816,1736552,1738791,1738925,1750374,1755709,1755740,1755746,1755758,1755954,1761279,1762326,1774712,1774973,1775069,1776994,1776998,1788334,1788337,1788929,1789947,1789998,1790045,1790200,1790296,1790302-1790304,1790330-1790331,1790436,1790439,1790444,1790446,1790488,1790521,1790523,1790569,1790632,1791598,1791718,1791728,1792620-1792622,1792625,1792961,1792963,1794266,1797415,1798105,1805380,1808039,1808836,1808910,1809649,1810452,1813286,18133
 30,1814239-1814240,1814326,1814329,1814331,1816527,1816628,1817485,1819857-1819858,1819860-1819861,1819934-1819935,1820080,1820755,1822357,1827534,1832203,1832691,1832985,1834253,1834494,1834541,1836235,1839068,1839493,1839622,1839769,1840372,1841078,1846806,1850087,1850095,1851541-1851542,1854123,1855049,1855347,1855443-1855444,1855839-1855840,1855855,1855864,1855867,1855877,1855949
+/apr/apr/trunk:733052,739635,741862,741866-741867,741869,741871,745763-745764,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,892435,892909,896382,896653,899905,901088,902077,902090,908427,910419,910597,917819,917837-917838,923311,923320,925965,929796,930508,931973,932585,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,143
 8940,1438957-1438959,1442903,1449568,1456418,1459994,1460179-1460180,1460241,1460399,1460405,1462738,1462813,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,1534882,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,1561040,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587045,1587063,1587543,1587545,1588878,1588937,1589982,1593611,1593614-1593615,1593680,1594684,1594708,1595549,1597797,1597803,1604590,1604596,1604598,1605104,1610854,1611023,1611107,1611110,1611117,1611120,1611125,1611184,
 1611193,1611466,1611515,1611517,1625173,1626564,1634615,1642159,1648830,1664406,1664447,1664451,1664471,1664769-1664770,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667420-1667421,1667423,1667900-1667901,1667903,1667914-1667916,1667962,1669077,1671292,1671329,1671356,1671386,1671389,1671513-1671514,1671957,1672354,1672366,1672495,1672575,1675644,1675656,1675668,1676013,1683521,1685929,1696140,1696767,1722547,1722557,1726928,1727020,1727160,1727175,1727199,1728957,1732582,1733451,1733594,1733694,1733706,1733708,1733775,1734816,1736552,1738791,1738925,1750374,1755709,1755740,1755746,1755758,1755954,1761279,1762326,1774712,1774973,1775069,1776994,1776998,1788334,1788337,1788929,1789947,1789998,1790045,1790200,1790296,1790302-1790304,1790330-1790331,1790436,1790439,1790444,1790446,1790488,1790521,1790523,1790569,1790632,1791598,1791718,1791728,1792620-1792622,1792625,1792961,1792963,1794266,1797415,1798105,1805380,1808039,1808836,1808910,1809649,1810452,1813286,18133
 30,1814239-1814240,1814326,1814329,1814331,1816527,1816628,1817485,1819857-1819858,1819860-1819861,1819934-1819935,1820080,1820755,1822357,1827534,1832203,1832691,1832985,1834253,1834494,1834541,1836235,1839068,1839493,1839622,1839769,1840372,1841078,1846806,1850087,1850095,1851541-1851542,1854123,1855049,1855347,1855443-1855444,1855839-1855840,1855855,1855864,1855867,1855877,1855949,1856022
 /apr/apr/trunk/test/testnames.c:1460405
 /httpd/httpd/trunk:1604590

Propchange: apr/apr/branches/1.7.x/build/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Mar 22 13:21:27 2019
@@ -1,4 +1,4 @@
 /apr/apr/branches/1.4.x/build:1003369,1101301
-/apr/apr/trunk/build:733052,739635,741862,741866-741867,741869,741871,745763-745764,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,892435,892909,896382,896653,899905,901088,902077,902090,908427,910419,910597,917819,917837-917838,923311,923320,925965,929796,930508,931973,932585,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,14288
 09,1438940,1438957-1438959,1442903,1449568,1456418,1459994,1460179-1460180,1460241,1460399,1460405,1462738,1462813,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,1561040,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587045,1587063,1587543,1587545,1588878,1588937,1589982,1593611,1593614-1593615,1593680,1594684,1594708,1595549,1597797,1597803,1604590,1604596,1604598,1605104,1610854,1611023,1611107,1611110,1611117,1611120,1611125,1611184,16
 11193,1611466,1611515,1611517,1625173,1626564,1634615,1642159,1648830,1664406,1664447,1664451,1664471,1664769-1664770,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667420-1667421,1667423,1667900-1667901,1667903,1667914-1667916,1667962,1669077,1671292,1671329,1671356,1671386,1671389,1671513-1671514,1671957,1672354,1672366,1672495,1672575,1675644,1675656,1675668,1676013,1683521,1685929,1696140,1696767,1722547,1722557,1726928,1727020,1727160,1727175,1727199,1728957,1732582,1733451,1733594,1733694,1733706,1733708,1733775,1734816,1736552,1738791,1738925,1750374,1755709,1755740,1755746,1755758,1755954,1761279,1762326,1774712,1774973,1775069,1776994,1776998,1788334,1788337,1788929,1789947,1789998,1790045,1790200,1790296,1790302-1790304,1790330-1790331,1790436,1790439,1790444,1790446,1790488,1790521,1790523,1790569,1790632,1791598,1791718,1791728,1792621-1792622,1792625,1792961,1792963,1797415,1798105,1805380,1808039,1808836,1808910,1809649,1810452,1813286,1813330,1816527
 ,1816628,1817485,1819857-1819858,1819860-1819861,1819934-1819935,1820080,1820186,1834494,1846806,1850095,1855443-1855444,1855839
+/apr/apr/trunk/build:733052,739635,741862,741866-741867,741869,741871,745763-745764,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,892435,892909,896382,896653,899905,901088,902077,902090,908427,910419,910597,917819,917837-917838,923311,923320,925965,929796,930508,931973,932585,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,14288
 09,1438940,1438957-1438959,1442903,1449568,1456418,1459994,1460179-1460180,1460241,1460399,1460405,1462738,1462813,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,1561040,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587045,1587063,1587543,1587545,1588878,1588937,1589982,1593611,1593614-1593615,1593680,1594684,1594708,1595549,1597797,1597803,1604590,1604596,1604598,1605104,1610854,1611023,1611107,1611110,1611117,1611120,1611125,1611184,16
 11193,1611466,1611515,1611517,1625173,1626564,1634615,1642159,1648830,1664406,1664447,1664451,1664471,1664769-1664770,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667420-1667421,1667423,1667900-1667901,1667903,1667914-1667916,1667962,1669077,1671292,1671329,1671356,1671386,1671389,1671513-1671514,1671957,1672354,1672366,1672495,1672575,1675644,1675656,1675668,1676013,1683521,1685929,1696140,1696767,1722547,1722557,1726928,1727020,1727160,1727175,1727199,1728957,1732582,1733451,1733594,1733694,1733706,1733708,1733775,1734816,1736552,1738791,1738925,1750374,1755709,1755740,1755746,1755758,1755954,1761279,1762326,1774712,1774973,1775069,1776994,1776998,1788334,1788337,1788929,1789947,1789998,1790045,1790200,1790296,1790302-1790304,1790330-1790331,1790436,1790439,1790444,1790446,1790488,1790521,1790523,1790569,1790632,1791598,1791718,1791728,1792621-1792622,1792625,1792961,1792963,1797415,1798105,1805380,1808039,1808836,1808910,1809649,1810452,1813286,1813330,1816527
 ,1816628,1817485,1819857-1819858,1819860-1819861,1819934-1819935,1820080,1820186,1834494,1846806,1850095,1855443-1855444,1855839,1856022
 /apr/apr/trunk/test/testnames.c/build:1460405
 /httpd/httpd/trunk/build:1604590

Modified: apr/apr/branches/1.7.x/build/apr_threads.m4
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.7.x/build/apr_threads.m4?rev=1856051&r1=1856050&r2=1856051&view=diff
==============================================================================
--- apr/apr/branches/1.7.x/build/apr_threads.m4 (original)
+++ apr/apr/branches/1.7.x/build/apr_threads.m4 Fri Mar 22 13:21:27 2019
@@ -262,6 +262,33 @@ int main(int argc, char **argv)
         exit(1);
     if (pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED))
         exit(2);
+    if (pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST))
+        exit(3);
+    if (pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT))
+        exit(4);
+    if (pthread_mutex_init(&mutex, &attr))
+        exit(5);
+    if (pthread_mutexattr_destroy(&attr))
+        exit(6);
+    if (pthread_mutex_destroy(&mutex))
+        exit(7);
+
+    exit(0);
+}], [apr_cv_mutex_robust_shared=yes], [
+AC_TRY_RUN([
+#include <sys/types.h>
+#include <pthread.h>
+#include <stdlib.h>
+
+int main(int argc, char **argv)
+{
+    pthread_mutex_t mutex;
+    pthread_mutexattr_t attr;
+
+    if (pthread_mutexattr_init(&attr))
+        exit(1);
+    if (pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED))
+        exit(2);
     if (pthread_mutexattr_setrobust_np(&attr, PTHREAD_MUTEX_ROBUST_NP))
         exit(3);
     if (pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT))
@@ -274,10 +301,14 @@ int main(int argc, char **argv)
         exit(7);
 
     exit(0);
-}], [apr_cv_mutex_robust_shared=yes], [apr_cv_mutex_robust_shared=no])])
+}], [apr_cv_mutex_robust_shared=np], [apr_cv_mutex_robust_shared=no])
+])])
 
 if test "$apr_cv_mutex_robust_shared" = "yes"; then
    AC_DEFINE([HAVE_PTHREAD_MUTEX_ROBUST], 1,
              [Define if cross-process robust mutexes are available])
+elif test "$apr_cv_mutex_robust_shared" = "np"; then
+   AC_DEFINE([HAVE_PTHREAD_MUTEX_ROBUST_NP], 1,
+             [Define if non-posix/portable cross-process robust mutexes are available])
 fi
 ])

Modified: apr/apr/branches/1.7.x/configure.in
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.7.x/configure.in?rev=1856051&r1=1856050&r2=1856051&view=diff
==============================================================================
--- apr/apr/branches/1.7.x/configure.in (original)
+++ apr/apr/branches/1.7.x/configure.in Fri Mar 22 13:21:27 2019
@@ -2349,6 +2349,14 @@ APR_IFALLYES(func:semget func:semctl fun
             APR_DECIDE(USE_SYSVSEM_SERIALIZE, [SysV IPC semget()]))
 APR_IFALLYES(header:OS.h func:create_sem func:acquire_sem func:acquire_sem_etc, 
             APR_DECIDE(USE_BEOSSEM, [BeOS Semaphores])) 
+# pthread mutex both pshared and robust[_np] is the best default
+case "$apr_cv_mutex_robust_shared" in
+"yes"|"np")
+    APR_DECIDE(USE_PROC_PTHREAD_SERIALIZE, [pthread pshared mutex]) 
+    ;;
+*)
+    ;;
+esac
 if test "x$apr_lock_method" != "x"; then
     APR_DECISION_FORCE($apr_lock_method)
 fi

Modified: apr/apr/branches/1.7.x/locks/unix/proc_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.7.x/locks/unix/proc_mutex.c?rev=1856051&r1=1856050&r2=1856051&view=diff
==============================================================================
--- apr/apr/branches/1.7.x/locks/unix/proc_mutex.c (original)
+++ apr/apr/branches/1.7.x/locks/unix/proc_mutex.c Fri Mar 22 13:21:27 2019
@@ -625,9 +625,13 @@ static apr_status_t proc_mutex_pthread_c
         return rv;
     }
 
+#if defined(HAVE_PTHREAD_MUTEX_ROBUST) || defined(HAVE_PTHREAD_MUTEX_ROBUST_NP)
 #ifdef HAVE_PTHREAD_MUTEX_ROBUST
-    if ((rv = pthread_mutexattr_setrobust_np(&mattr, 
-                                               PTHREAD_MUTEX_ROBUST_NP))) {
+    rv = pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST);
+#else
+    rv = pthread_mutexattr_setrobust_np(&mattr, PTHREAD_MUTEX_ROBUST_NP);
+#endif
+    if (rv) {
 #ifdef HAVE_ZOS_PTHREADS
         rv = errno;
 #endif
@@ -643,7 +647,7 @@ static apr_status_t proc_mutex_pthread_c
         pthread_mutexattr_destroy(&mattr);
         return rv;
     }
-#endif /* HAVE_PTHREAD_MUTEX_ROBUST */
+#endif /* HAVE_PTHREAD_MUTEX_ROBUST[_NP] */
 
     if ((rv = pthread_mutex_init(&proc_pthread_mutex(new_mutex), &mattr))) {
 #ifdef HAVE_ZOS_PTHREADS
@@ -695,11 +699,15 @@ static apr_status_t proc_mutex_pthread_a
 #ifdef HAVE_ZOS_PTHREADS 
             rv = errno;
 #endif
-#ifdef HAVE_PTHREAD_MUTEX_ROBUST
+#if defined(HAVE_PTHREAD_MUTEX_ROBUST) || defined(HAVE_PTHREAD_MUTEX_ROBUST_NP)
             /* Okay, our owner died.  Let's try to make it consistent again. */
             if (rv == EOWNERDEAD) {
                 proc_pthread_mutex_dec(mutex);
+#ifdef HAVE_PTHREAD_MUTEX_ROBUST
+                pthread_mutex_consistent(&proc_pthread_mutex(mutex));
+#else
                 pthread_mutex_consistent_np(&proc_pthread_mutex(mutex));
+#endif
             }
             else
 #endif
@@ -807,11 +815,15 @@ static apr_status_t proc_mutex_pthread_a
             }
         }
         if (rv) {
-#ifdef HAVE_PTHREAD_MUTEX_ROBUST
+#if defined(HAVE_PTHREAD_MUTEX_ROBUST) || defined(HAVE_PTHREAD_MUTEX_ROBUST_NP)
             /* Okay, our owner died.  Let's try to make it consistent again. */
             if (rv == EOWNERDEAD) {
                 proc_pthread_mutex_dec(mutex);
+#ifdef HAVE_PTHREAD_MUTEX_ROBUST
+                pthread_mutex_consistent(&proc_pthread_mutex(mutex));
+#else
                 pthread_mutex_consistent_np(&proc_pthread_mutex(mutex));
+#endif
             }
             else
 #endif
@@ -853,11 +865,15 @@ static apr_status_t proc_mutex_pthread_r
 #ifdef HAVE_ZOS_PTHREADS 
             rv = errno;
 #endif
-#ifdef HAVE_PTHREAD_MUTEX_ROBUST
+#if defined(HAVE_PTHREAD_MUTEX_ROBUST) || defined(HAVE_PTHREAD_MUTEX_ROBUST_NP)
             /* Okay, our owner died.  Let's try to make it consistent again. */
             if (rv == EOWNERDEAD) {
                 proc_pthread_mutex_dec(mutex);
+#ifdef HAVE_PTHREAD_MUTEX_ROBUST
+                pthread_mutex_consistent(&proc_pthread_mutex(mutex));
+#else
                 pthread_mutex_consistent_np(&proc_pthread_mutex(mutex));
+#endif
             }
             else
 #endif



Re: svn commit: r1856051 - in /apr/apr/branches/1.7.x: ./ build/ build/apr_threads.m4 configure.in locks/unix/proc_mutex.c

Posted by Graham Leggett <mi...@sharp.fm>.
On 03 Jan 2020, at 12:37, Yann Ylavic <yl...@gmail.com> wrote:

>> Looking at the PTHREAD matches in apr.h:
>> 
>> #define APR_USE_PROC_PTHREAD_SERIALIZE    1
>> #define APR_HAS_PROC_PTHREAD_SERIALIZE    0
> 
> Inconsistent :/
> 
> I can think of two ways to fix it:
> 1. don't check for /dev/zero for PROC_PTHREAD capability,
> 2. don't try to use PROC_PTHREAD by default when cross compiling.
> 
> We could do #1 if all unixes had /dev/zero, which I'm not sure of.
> 
> With #2, the default when cross compiling on linux-like target would
> probably be SYSVSEM, but forcing with "./configure
> apr_lock_method=USE_PROC_PTHREAD_SERIALIZE ..." is still possible.
> Does not look insane or too much to ask, to me...
> 
> So attached patch is #2, better ideas?

Getting back to this one - attached patch 2 worked, can confirm it sorted out the problem and APR built successfully.

Regards,
Graham
—


Re: svn commit: r1856051 - in /apr/apr/branches/1.7.x: ./ build/ build/apr_threads.m4 configure.in locks/unix/proc_mutex.c

Posted by Yann Ylavic <yl...@gmail.com>.
On Fri, Jan 3, 2020 at 1:46 AM Graham Leggett <mi...@sharp.fm> wrote:
>
> On 02 Jan 2020, at 16:16, Yann Ylavic <yl...@gmail.com> wrote:
>
> >> It looks like, in the generated "apr.h",
> >> APR_USE_PROC_PTHREAD_SERIALIZE is set but not
> >> APR_HAS_PROC_PTHREAD_SERIALIZE?
> >
> > This possibly has to do with "/dev/zero" detection from:
> >
> > APR_IFALLYES(header:pthread.h define:PTHREAD_PROCESS_SHARED dnl
> >             func:pthread_mutexattr_setpshared dnl
> >             file:/dev/zero,
> >             hasprocpthreadser="1", hasprocpthreadser="0")
> >
> > I'm not sure it can work for cross-compilation, does forcing it with
> > "./configure ... ac_cv_file__dev_zero=yes ..." help?
>
> Working backwards, I tried the ac_cv_file__dev_zero=yes, and it made no difference in this case.

Hmm OK, probably overridden by AC_CHECK_FILE(/dev/zero)...

>
> Right at the bottom, we have:
>
> hasprocpthreadser=‘0'
>
> which means (if I’m reading this correctly) APR_HAS_PROC_PTHREAD_SERIALIZE is not set.

Right, and that's because AC_CHECK_FILE() does not work when cross-compiling.

>
> Looking at the PTHREAD matches in apr.h:
>
> #define APR_USE_PROC_PTHREAD_SERIALIZE    1
> #define APR_HAS_PROC_PTHREAD_SERIALIZE    0

Inconsistent :/

I can think of two ways to fix it:
1. don't check for /dev/zero for PROC_PTHREAD capability,
2. don't try to use PROC_PTHREAD by default when cross compiling.

We could do #1 if all unixes had /dev/zero, which I'm not sure of.

With #2, the default when cross compiling on linux-like target would
probably be SYSVSEM, but forcing with "./configure
apr_lock_method=USE_PROC_PTHREAD_SERIALIZE ..." is still possible.
Does not look insane or too much to ask, to me...

So attached patch is #2, better ideas?

Regards,
Yann.

Re: svn commit: r1856051 - in /apr/apr/branches/1.7.x: ./ build/ build/apr_threads.m4 configure.in locks/unix/proc_mutex.c

Posted by Graham Leggett <mi...@sharp.fm>.
On 02 Jan 2020, at 16:16, Yann Ylavic <yl...@gmail.com> wrote:

>> It looks like, in the generated "apr.h",
>> APR_USE_PROC_PTHREAD_SERIALIZE is set but not
>> APR_HAS_PROC_PTHREAD_SERIALIZE?
> 
> This possibly has to do with "/dev/zero" detection from:
> 
> APR_IFALLYES(header:pthread.h define:PTHREAD_PROCESS_SHARED dnl
>             func:pthread_mutexattr_setpshared dnl
>             file:/dev/zero,
>             hasprocpthreadser="1", hasprocpthreadser="0")
> 
> I'm not sure it can work for cross-compilation, does forcing it with
> "./configure ... ac_cv_file__dev_zero=yes ..." help?

Working backwards, I tried the ac_cv_file__dev_zero=yes, and it made no difference in this case.

Possibly because they are setting the following flags explicitly:

CONFIGURE_VARS += \
        ac_cv_sizeof_struct_iovec=1 \
        ac_cv_struct_rlimit=yes \
        ac_cv_func_sem_open=yes \
        ac_cv_func_pthread_mutexattr_setpshared=yes \
        apr_cv_mutex_robust_shared=yes \
        apr_cv_tcp_nodelay_with_cork=yes \
        apr_cv_sock_cloexec=yes \
        apr_cv_process_shared_works=yes \
        apr_cv_mutex_recursive=yes \
        apr_cv_epoll_create1=yes \
        apr_cv_epoll=yes \
        apr_cv_dup3=yes \
        apr_cv_accept4=yes 

The lines from config.log with pthread in them are as follows:

[minfrin@bob openwrt]$ cat /home/minfrin/src/openwrt/openwrt/build_dir/target-mips_24kc_musl/apr-1.7.0/config.log | grep pthread
configure:19224: checking pthread.h usability
configure:19224: checking pthread.h presence
configure:19224: checking for pthread.h
configure:19272: checking for CFLAGS needed for pthreads
configure:19362: checking for LIBS needed for pthreads
configure:19456: checking for pthread.h
configure:19757: checking whether pthread_getspecific takes two arguments
conftest.c:37:1: error: too many arguments to function 'pthread_getspecific'
 pthread_getspecific(key,&tmp);
/home/minfrin/src/openwrt/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include/pthread.h:140:7: note: declared here
 void *pthread_getspecific(pthread_key_t);
| #include <pthread.h>
| pthread_key_t key;
| pthread_getspecific(key,&tmp);
configure:19802: checking whether pthread_attr_getdetachstate takes one argument
conftest.c:36:1: error: too few arguments to function 'pthread_attr_getdetachstate'
 pthread_attr_getdetachstate(attr);
/home/minfrin/src/openwrt/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include/pthread.h:150:5: note: declared here
 int pthread_attr_getdetachstate(const pthread_attr_t *, int *);
| #include <pthread.h>
| pthread_attr_t *attr;
| pthread_attr_getdetachstate(attr);
configure:19892: checking for pthread_key_delete
configure:19892: checking for pthread_rwlock_init
configure:19892: checking for pthread_attr_setguardsize
configure:19892: checking for pthread_yield
conftest.c:(.text.startup+0x2): undefined reference to `pthread_yield'
| /* Define pthread_yield to an innocuous variant, in case <limits.h> declares pthread_yield.
| #define pthread_yield innocuous_pthread_yield
|     which can conflict with char pthread_yield (); below.
| #undef pthread_yield
| char pthread_yield ();
| #if defined __stub_pthread_yield || defined __stub___pthread_yield
| return pthread_yield ();
configure:19903: checking for pthread_rwlock_t
|     /* When using the unproven-pthreads package, we need to pull in this
|      * on.  XXX Should probably be fixed in the unproven-pthreads package.
| #include <pthread.h>
configure:26041: checking for PTHREAD_PROCESS_SHARED in pthread.h
configure:26077: checking for pthread_mutex_timedlock
configure:26077: checking for pthread_mutexattr_setpshared
configure:26516: checking for pthread_condattr_setpshared
configure:26750: result: decision on apr_lock implementation method... pthread pshared mutex
ac_cv_func_pthread_attr_setguardsize=yes
ac_cv_func_pthread_condattr_setpshared=yes
ac_cv_func_pthread_key_delete=yes
ac_cv_func_pthread_mutex_timedlock=yes
ac_cv_func_pthread_mutexattr_setpshared=yes
ac_cv_func_pthread_rwlock_init=yes
ac_cv_func_pthread_yield=no
ac_cv_header_pthread_h=yes
ac_cv_pthread_attr_getdetachstate_one_arg=no
ac_cv_pthread_getspecific_two_args=no
hasprocpthreadser='0'
have_pthread_condattr_setpshared='1'
have_pthread_mutex_timedlock='1'
procpthreadser='1'
pthreadh='1'
pthreadser=‘1

Right at the bottom, we have:

hasprocpthreadser=‘0'

which means (if I’m reading this correctly) APR_HAS_PROC_PTHREAD_SERIALIZE is not set.

Looking at the PTHREAD matches in apr.h:

[minfrin@bob apr-1.7.0]$ cat /home/minfrin/src/openwrt/openwrt/build_dir/target-mips_24kc_musl/apr-1.7.0/include/apr.h | grep PTHREAD
#define APR_HAVE_PTHREAD_H       1
#define APR_USE_PROC_PTHREAD_SERIALIZE    1 
#define APR_USE_PTHREAD_SERIALIZE         1 
#define APR_HAS_PROC_PTHREAD_SERIALIZE    0

On my Mac, this works:

Little-Net:apr-1.7 minfrin$ cat include/apr.h | grep PTHREAD
#define APR_HAVE_PTHREAD_H       1
#define APR_USE_PROC_PTHREAD_SERIALIZE    0 
#define APR_USE_PTHREAD_SERIALIZE         1 
#define APR_HAS_PROC_PTHREAD_SERIALIZE    0

Regards,
Graham
—


Re: svn commit: r1856051 - in /apr/apr/branches/1.7.x: ./ build/ build/apr_threads.m4 configure.in locks/unix/proc_mutex.c

Posted by Yann Ylavic <yl...@gmail.com>.
On Thu, Jan 2, 2020 at 2:28 PM Yann Ylavic <yl...@gmail.com> wrote:
>
> On Wed, Jan 1, 2020 at 1:33 PM Graham Leggett <mi...@sharp.fm> wrote:
> >
> > Looks like this has triggered broken builds on openwrt, would it be possible to take a look?
>
> It looks like, in the generated "apr.h",
> APR_USE_PROC_PTHREAD_SERIALIZE is set but not
> APR_HAS_PROC_PTHREAD_SERIALIZE?

This possibly has to do with "/dev/zero" detection from:

APR_IFALLYES(header:pthread.h define:PTHREAD_PROCESS_SHARED dnl
             func:pthread_mutexattr_setpshared dnl
             file:/dev/zero,
             hasprocpthreadser="1", hasprocpthreadser="0")

I'm not sure it can work for cross-compilation, does forcing it with
"./configure ... ac_cv_file__dev_zero=yes ..." help?

Regards,
Yann.

Re: svn commit: r1856051 - in /apr/apr/branches/1.7.x: ./ build/ build/apr_threads.m4 configure.in locks/unix/proc_mutex.c

Posted by Yann Ylavic <yl...@gmail.com>.
Hi Graham,

On Wed, Jan 1, 2020 at 1:33 PM Graham Leggett <mi...@sharp.fm> wrote:
>
> Looks like this has triggered broken builds on openwrt, would it be possible to take a look?

It looks like, in the generated "apr.h",
APR_USE_PROC_PTHREAD_SERIALIZE is set but not
APR_HAS_PROC_PTHREAD_SERIALIZE?
Could you please provide the "config.log" file?

Regards,
Yann.

Re: svn commit: r1856051 - in /apr/apr/branches/1.7.x: ./ build/ build/apr_threads.m4 configure.in locks/unix/proc_mutex.c

Posted by Graham Leggett <mi...@sharp.fm>.
On 22 Mar 2019, at 15:21, ylavic@apache.org wrote:

> Author: ylavic
> Date: Fri Mar 22 13:21:27 2019
> New Revision: 1856051
> 
> URL: http://svn.apache.org/viewvc?rev=1856051&view=rev
> Log:
> Merge r1856022 from trunk:
> 
> Use proc mutex pthread by default when robust[_np]
> 
> On platforms that support pshared and robust pthread mutex, this is usually
> the best interprocess mutex mechanism because it's efficient, posix, not
> limited and not persistent on the system when the program exits (i.e. no need
> to delete it explicitely before leaving, like IPC SysV or files for instance).
> 
> Note that on older POSIX systems pthread_mutex_{setrobust,consistent}() funcs
> existed with the non-posix _np() suffix, and we consider them equivalent.

Looks like this has triggered broken builds on openwrt, would it be possible to take a look?

locks/unix/proc_mutex.c: In function 'proc_mutex_choose_method':
locks/unix/proc_mutex.c:1494:28: error: 'mutex_proc_pthread_methods' undeclared (first use in this function); did you mean 'mutex_posixsem_methods'?
         new_mutex->meth = &mutex_proc_pthread_methods;
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
                            mutex_posixsem_methods
locks/unix/proc_mutex.c:1494:28: note: each undeclared identifier is reported only once for each function it appears in
locks/unix/proc_mutex.c:1496:27: error: 'apr_os_proc_mutex_t {aka struct apr_os_proc_mutex_t}' has no member named 'pthread_interproc'; did you mean 'psem_interproc'?
             if (ospmutex->pthread_interproc == NULL) {
                           ^~~~~~~~~~~~~~~~~
                           psem_interproc
locks/unix/proc_mutex.c:1499:27: error: 'apr_os_proc_mutex_t {aka struct apr_os_proc_mutex_t}' has no member named 'pthread_interproc'; did you mean 'psem_interproc'?
             new_mutex->os.pthread_interproc = ospmutex->pthread_interproc;
                           ^~~~~~~~~~~~~~~~~
                           psem_interproc
locks/unix/proc_mutex.c:1499:57: error: 'apr_os_proc_mutex_t {aka struct apr_os_proc_mutex_t}' has no member named 'pthread_interproc'; did you mean 'psem_interproc'?
             new_mutex->os.pthread_interproc = ospmutex->pthread_interproc;
                                                         ^~~~~~~~~~~~~~~~~
                                                         psem_interproc
make[4]: *** [/home/minfrin/src/openwrt/openwrt/build_dir/target-mips_24kc_musl/apr-1.7.0/build/apr_rules.mk:206: locks/unix/proc_mutex.lo] Error 1
make[4]: Leaving directory '/home/minfrin/src/openwrt/openwrt/build_dir/target-mips_24kc_musl/apr-1.7.0'
make[3]: *** [/home/minfrin/src/openwrt/openwrt/build_dir/target-mips_24kc_musl/apr-1.7.0/build/apr_rules.mk:118: all-recursive] Error 1
make[3]: Leaving directory '/home/minfrin/src/openwrt/openwrt/build_dir/target-mips_24kc_musl/apr-1.7.0'
make[2]: *** [Makefile:80: /home/minfrin/src/openwrt/openwrt/build_dir/target-mips_24kc_musl/apr-1.7.0/.built] Error 2
make[2]: Leaving directory '/home/minfrin/src/openwrt/packages-minfrin/libs/apr'
time: package/feeds/packages/apr/compile#17.19#5.56#22.26
make[1]: *** [package/Makefile:113: package/feeds/packages/apr/compile] Error 2
make[1]: Leaving directory '/home/minfrin/src/openwrt/openwrt'
make: *** [/home/minfrin/src/openwrt/openwrt/include/toplevel.mk:218: package/apr/compile] Error 2

Regards,
Graham
—