You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by wr...@apache.org on 2017/05/23 17:41:18 UTC
svn commit: r1795940 - in /apr/apr/branches/1.6.x: ./ include/
include/arch/unix/ locks/beos/ locks/netware/ locks/os2/ locks/unix/
locks/win32/ test/
Author: wrowe
Date: Tue May 23 17:41:17 2017
New Revision: 1795940
URL: http://svn.apache.org/viewvc?rev=1795940&view=rev
Log:
Revert 1790490 (r1790488 from trunk), was;
locks: follow up to r1667900.
Axe the 'absolute' argument of apr_{thread,proc,global}_mutex_timedlock()
which was confusing, hence 'timeout' is always relative now.
It still makes sense (to me) to handle a negative timeout as INFINITE, a nul
one as IMMEDIATE, and a positive one as an upper bound timeout (like most if
not all of the underlying system calls...).
Modified:
apr/apr/branches/1.6.x/ (props changed)
apr/apr/branches/1.6.x/include/apr_global_mutex.h
apr/apr/branches/1.6.x/include/apr_proc_mutex.h
apr/apr/branches/1.6.x/include/apr_thread_mutex.h
apr/apr/branches/1.6.x/include/arch/unix/apr_arch_proc_mutex.h
apr/apr/branches/1.6.x/locks/beos/proc_mutex.c
apr/apr/branches/1.6.x/locks/beos/thread_mutex.c
apr/apr/branches/1.6.x/locks/netware/proc_mutex.c
apr/apr/branches/1.6.x/locks/netware/thread_mutex.c
apr/apr/branches/1.6.x/locks/os2/proc_mutex.c
apr/apr/branches/1.6.x/locks/os2/thread_mutex.c
apr/apr/branches/1.6.x/locks/unix/global_mutex.c
apr/apr/branches/1.6.x/locks/unix/proc_mutex.c
apr/apr/branches/1.6.x/locks/unix/thread_mutex.c
apr/apr/branches/1.6.x/locks/win32/proc_mutex.c
apr/apr/branches/1.6.x/locks/win32/thread_mutex.c
apr/apr/branches/1.6.x/test/testlock.c
apr/apr/branches/1.6.x/test/testlockperf.c
apr/apr/branches/1.6.x/test/testprocmutex.c
Propchange: apr/apr/branches/1.6.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue May 23 17:41:17 2017
@@ -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,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,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,1789947,1789998,1790045,1790200,1790296,1790302-1790304,1790330-1790331,1790436,1790439,1790444,1790446,1790488,1791598,1791718,1792961,1792963
+/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,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,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,1789947,1789998,1790045,1790200,1790296,1790302-1790304,1790330-1790331,1790436,1790439,1790444,1790446,1791598,1791718,1792961,1792963
/apr/apr/trunk/test/testnames.c:1460405
/httpd/httpd/trunk:1604590
Modified: apr/apr/branches/1.6.x/include/apr_global_mutex.h
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/include/apr_global_mutex.h?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/include/apr_global_mutex.h (original)
+++ apr/apr/branches/1.6.x/include/apr_global_mutex.h Tue May 23 17:41:17 2017
@@ -114,10 +114,12 @@ APR_DECLARE(apr_status_t) apr_global_mut
* Attempt to acquire the lock for the given mutex until timeout expires.
* If the acquisition time outs, the call returns with APR_TIMEUP.
* @param mutex the mutex on which to attempt the lock acquiring.
- * @param timeout the relative timeout (microseconds)
+ * @param timeout the absolute time or relative timeout (microseconds)
+ * @param absolute whether the timeout given is absolute (!0) or relative (0)
*/
APR_DECLARE(apr_status_t) apr_global_mutex_timedlock(apr_global_mutex_t *mutex,
- apr_time_t timeout);
+ apr_time_t timeout,
+ int absolute);
/**
* Release the lock for the given mutex.
Modified: apr/apr/branches/1.6.x/include/apr_proc_mutex.h
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/include/apr_proc_mutex.h?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/include/apr_proc_mutex.h (original)
+++ apr/apr/branches/1.6.x/include/apr_proc_mutex.h Tue May 23 17:41:17 2017
@@ -119,10 +119,12 @@ APR_DECLARE(apr_status_t) apr_proc_mutex
* Attempt to acquire the lock for the given mutex until timeout expires.
* If the acquisition time outs, the call returns with APR_TIMEUP.
* @param mutex the mutex on which to attempt the lock acquiring.
- * @param timeout the relative timeout (microseconds)
+ * @param timeout the absolute time or relative timeout (microseconds)
+ * @param absolute whether the timeout given is absolute (!0) or relative (0)
*/
APR_DECLARE(apr_status_t) apr_proc_mutex_timedlock(apr_proc_mutex_t *mutex,
- apr_time_t timeout);
+ apr_time_t timeout,
+ int absolute);
/**
* Release the lock for the given mutex.
Modified: apr/apr/branches/1.6.x/include/apr_thread_mutex.h
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/include/apr_thread_mutex.h?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/include/apr_thread_mutex.h (original)
+++ apr/apr/branches/1.6.x/include/apr_thread_mutex.h Tue May 23 17:41:17 2017
@@ -87,10 +87,12 @@ APR_DECLARE(apr_status_t) apr_thread_mut
* Attempt to acquire the lock for the given mutex until timeout expires.
* If the acquisition time outs, the call returns with APR_TIMEUP.
* @param mutex the mutex on which to attempt the lock acquiring.
- * @param timeout the relative timeout (microseconds)
+ * @param timeout the absolute time or relative timeout (microseconds)
+ * @param absolute whether the timeout given is absolute (!0) or relative (0)
*/
APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex,
- apr_time_t timeout);
+ apr_time_t timeout,
+ int absolute);
/**
* Release the lock for the given mutex.
Modified: apr/apr/branches/1.6.x/include/arch/unix/apr_arch_proc_mutex.h
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/include/arch/unix/apr_arch_proc_mutex.h?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/include/arch/unix/apr_arch_proc_mutex.h (original)
+++ apr/apr/branches/1.6.x/include/arch/unix/apr_arch_proc_mutex.h Tue May 23 17:41:17 2017
@@ -70,7 +70,7 @@ struct apr_proc_mutex_unix_lock_methods_
apr_status_t (*create)(apr_proc_mutex_t *, const char *);
apr_status_t (*acquire)(apr_proc_mutex_t *);
apr_status_t (*tryacquire)(apr_proc_mutex_t *);
- apr_status_t (*timedacquire)(apr_proc_mutex_t *, apr_time_t);
+ apr_status_t (*timedacquire)(apr_proc_mutex_t *, apr_time_t, int);
apr_status_t (*release)(apr_proc_mutex_t *);
apr_status_t (*cleanup)(void *);
apr_status_t (*child_init)(apr_proc_mutex_t **, apr_pool_t *, const char *);
Modified: apr/apr/branches/1.6.x/locks/beos/proc_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/beos/proc_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/beos/proc_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/beos/proc_mutex.c Tue May 23 17:41:17 2017
@@ -109,20 +109,33 @@ APR_DECLARE(apr_status_t) apr_proc_mutex
}
APR_DECLARE(apr_status_t) apr_proc_mutex_timedlock(apr_proc_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
int32 stat;
if (atomic_add(&mutex->LockCount, 1) > 0) {
- if (!timeout) {
- stat = B_TIMED_OUT;
- }
- else if (timeout < 0) {
+ if (timeout < 0) {
stat = acquire_sem(mutex->Lock);
}
else {
- stat = acquire_sem_etc(mutex->Lock, 1, B_RELATIVE_TIMEOUT,
- timeout);
+ int flag = 0;
+ if (timeout > 0) {
+ if (absolute) {
+ apr_time_t now = apr_time_now();
+ if (timeout > now) {
+ timeout -= now;
+ }
+ else {
+ timeout = 0;
+ }
+ flag = B_ABSOLUTE_TIMEOUT;
+ }
+ else {
+ flag = B_RELATIVE_TIMEOUT;
+ }
+ }
+ stat = acquire_sem_etc(mutex->Lock, 1, flag, timeout);
}
if (stat < B_NO_ERROR) {
atomic_add(&mutex->LockCount, -1);
Modified: apr/apr/branches/1.6.x/locks/beos/thread_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/beos/thread_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/beos/thread_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/beos/thread_mutex.c Tue May 23 17:41:17 2017
@@ -132,7 +132,8 @@ APR_DECLARE(apr_status_t) apr_thread_mut
}
APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
int32 stat;
thread_id me = find_thread(NULL);
@@ -143,15 +144,27 @@ APR_DECLARE(apr_status_t) apr_thread_mut
}
if (atomic_add(&mutex->LockCount, 1) > 0) {
- if (!timeout) {
- stat = B_TIMED_OUT;
- }
- else if (timeout < 0) {
+ if (timeout < 0) {
stat = acquire_sem(mutex->Lock);
}
else {
- stat = acquire_sem_etc(mutex->Lock, 1, B_RELATIVE_TIMEOUT,
- timeout);
+ int flag = 0;
+ if (timeout > 0) {
+ if (absolute) {
+ apr_time_t now = apr_time_now();
+ if (timeout > now) {
+ timeout -= now;
+ }
+ else {
+ timeout = 0;
+ }
+ flag = B_ABSOLUTE_TIMEOUT;
+ }
+ else {
+ flag = B_RELATIVE_TIMEOUT;
+ }
+ }
+ stat = acquire_sem_etc(mutex->Lock, 1, flag, timeout);
}
if (stat < B_NO_ERROR) {
atomic_add(&mutex->LockCount, -1);
Modified: apr/apr/branches/1.6.x/locks/netware/proc_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/netware/proc_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/netware/proc_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/netware/proc_mutex.c Tue May 23 17:41:17 2017
@@ -73,10 +73,11 @@ APR_DECLARE(apr_status_t) apr_proc_mutex
}
APR_DECLARE(apr_status_t) apr_proc_mutex_timedlock(apr_proc_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
if (mutex)
- return apr_thread_mutex_timedlock(mutex->mutex, timeout);
+ return apr_thread_mutex_timedlock(mutex->mutex, timeout, absolute);
return APR_ENOLOCK;
}
Modified: apr/apr/branches/1.6.x/locks/netware/thread_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/netware/thread_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/netware/thread_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/netware/thread_mutex.c Tue May 23 17:41:17 2017
@@ -112,26 +112,30 @@ APR_DECLARE(apr_status_t) apr_thread_mut
}
APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
if (mutex->cond) {
apr_status_t rv;
NXLock(mutex->mutex);
if (mutex->locked) {
- if (!timeout) {
- rv = APR_TIMEUP;
+ mutex->num_waiters++;
+ if (timeout < 0) {
+ rv = apr_thread_cond_wait(mutex->cond, mutex);
}
else {
- mutex->num_waiters++;
- if (timeout < 0) {
- rv = apr_thread_cond_wait(mutex->cond, mutex);
+ if (absolute) {
+ apr_time_t now = apr_time_now();
+ if (timeout > now) {
+ timeout -= now;
+ }
+ else {
+ timeout = 0;
+ }
}
- else {
- rv = apr_thread_cond_timedwait(mutex->cond, mutex,
- timeout);
- }
- mutex->num_waiters--;
+ rv = apr_thread_cond_timedwait(mutex->cond, mutex, timeout);
}
+ mutex->num_waiters--;
}
else {
mutex->locked = 1;
Modified: apr/apr/branches/1.6.x/locks/os2/proc_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/os2/proc_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/os2/proc_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/os2/proc_mutex.c Tue May 23 17:41:17 2017
@@ -156,24 +156,35 @@ APR_DECLARE(apr_status_t) apr_proc_mutex
mutex->lock_count++;
}
- return (rc == ERROR_TIMEOUT) ? APR_EBUSY : APR_FROM_OS_ERROR(rc);
+ return APR_FROM_OS_ERROR(rc);
}
APR_DECLARE(apr_status_t) apr_proc_mutex_timedlock(apr_proc_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
ULONG rc;
if (timeout < 0) {
rc = DosRequestMutexSem(mutex->hMutex, SEM_INDEFINITE_WAIT);
}
- else if (!timeout) {
- rc = DosRequestMutexSem(mutex->hMutex, SEM_IMMEDIATE_RETURN);
- }
else {
+ if (absolute) {
+ apr_time_t now = apr_time_now();
+ if (timeout > now) {
+ timeout -= now;
+ }
+ else {
+ timeout = 0;
+ }
+ }
+
rc = DosRequestMutexSem(mutex->hMutex, apr_time_as_msec(timeout));
+ if (rc == ERROR_TIMEOUT) {
+ return APR_TIMEUP;
+ }
}
if (rc == 0) {
@@ -181,7 +192,7 @@ APR_DECLARE(apr_status_t) apr_proc_mutex
mutex->lock_count++;
}
- return (rc == ERROR_TIMEOUT) ? APR_TIMEUP : APR_FROM_OS_ERROR(rc);
+ return APR_FROM_OS_ERROR(rc);
}
Modified: apr/apr/branches/1.6.x/locks/os2/thread_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/os2/thread_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/os2/thread_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/os2/thread_mutex.c Tue May 23 17:41:17 2017
@@ -66,28 +66,37 @@ APR_DECLARE(apr_status_t) apr_thread_mut
APR_DECLARE(apr_status_t) apr_thread_mutex_trylock(apr_thread_mutex_t *mutex)
{
ULONG rc = DosRequestMutexSem(mutex->hMutex, SEM_IMMEDIATE_RETURN);
-
- return (rc == ERROR_TIMEOUT) ? APR_EBUSY : APR_FROM_OS_ERROR(rc);
+ return APR_OS2_STATUS(rc);
}
APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
ULONG rc;
if (timeout < 0) {
rc = DosRequestMutexSem(mutex->hMutex, SEM_INDEFINITE_WAIT);
}
- else if (!timeout) {
- rc = DosRequestMutexSem(mutex->hMutex, SEM_IMMEDIATE_RETURN);
- }
else {
- rc = DosRequestMutexSem(mutex->hMutex, apr_time_as_msec(timeout));
+ if (absolute) {
+ apr_time_t now = apr_time_now();
+ if (timeout > now) {
+ timeout -= now;
+ }
+ else {
+ timeout = 0;
+ }
+ }
+ rc = DosRequestMutexSem(mutex->hMutex, apr_time_as_msec(usec));
+ if (rc == ERROR_TIMEOUT) {
+ return APR_TIMEUP;
+ }
}
- return (rc == ERROR_TIMEOUT) ? APR_TIMEUP : APR_FROM_OS_ERROR(rc);
+ return APR_FROM_OS_ERROR(rc);
}
Modified: apr/apr/branches/1.6.x/locks/unix/global_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/unix/global_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/unix/global_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/unix/global_mutex.c Tue May 23 17:41:17 2017
@@ -143,30 +143,27 @@ APR_DECLARE(apr_status_t) apr_global_mut
}
APR_DECLARE(apr_status_t) apr_global_mutex_timedlock(apr_global_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
apr_status_t rv;
#if APR_HAS_THREADS
if (mutex->thread_mutex) {
- apr_time_t expiry = 0;
- if (timeout > 0) {
- expiry = apr_time_now() + timeout;
+ if (timeout >= 0 && !absolute) {
+ timeout += apr_time_now();
+ absolute = 1;
}
- rv = apr_thread_mutex_timedlock(mutex->thread_mutex, timeout);
+ rv = apr_thread_mutex_timedlock(mutex->thread_mutex, timeout,
+ absolute);
if (rv != APR_SUCCESS) {
return rv;
}
- if (expiry) {
- timeout = expiry - apr_time_now();
- if (timeout < 0) {
- timeout = 0;
- }
- }
}
#endif /* APR_HAS_THREADS */
- rv = apr_proc_mutex_timedlock(mutex->proc_mutex, timeout);
+ rv = apr_proc_mutex_timedlock(mutex->proc_mutex, timeout,
+ absolute);
#if APR_HAS_THREADS
if (rv != APR_SUCCESS) {
Modified: apr/apr/branches/1.6.x/locks/unix/proc_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/unix/proc_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/unix/proc_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/unix/proc_mutex.c Tue May 23 17:41:17 2017
@@ -56,9 +56,16 @@ static apr_status_t proc_mutex_no_perms_
&& !defined(HAVE_PTHREAD_MUTEX_TIMEDLOCK) \
&& !defined(HAVE_PTHREAD_CONDATTR_SETPSHARED))
static apr_status_t proc_mutex_spinsleep_timedacquire(apr_proc_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
apr_status_t rv;
+ if (absolute) {
+ timeout -= apr_time_now();
+ if (timeout < 0) {
+ timeout = 0;
+ }
+ }
if (timeout < 0) {
rv = apr_proc_mutex_lock(mutex);
}
@@ -228,20 +235,19 @@ static apr_status_t proc_mutex_posix_try
#if defined(HAVE_SEM_TIMEDWAIT)
static apr_status_t proc_mutex_posix_timedacquire(apr_proc_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
if (timeout < 0) {
return proc_mutex_posix_acquire(mutex);
}
- else if (!timeout) {
- apr_status_t rv = proc_mutex_posix_tryacquire(mutex);
- return (rv == APR_EBUSY) ? APR_TIMEUP : rv;
- }
else {
int rc;
struct timespec abstime;
- timeout += apr_time_now();
+ if (!absolute) {
+ timeout += apr_time_now();
+ }
abstime.tv_sec = apr_time_sec(timeout);
abstime.tv_nsec = apr_time_usec(timeout) * 1000; /* nanoseconds */
@@ -386,22 +392,23 @@ static apr_status_t proc_mutex_sysv_trya
#if defined(HAVE_SEMTIMEDOP)
static apr_status_t proc_mutex_sysv_timedacquire(apr_proc_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
if (timeout < 0) {
return proc_mutex_sysv_acquire(mutex);
}
- else if (!timeout) {
- apr_status_t rv = proc_mutex_sysv_tryacquire(mutex);
- return (rv == APR_EBUSY) ? APR_TIMEUP : rv;
- }
else {
int rc;
struct timespec reltime;
-
+ if (absolute) {
+ timeout -= apr_time_now();
+ if (timeout < 0) {
+ return proc_mutex_sysv_tryacquire(mutex);
+ }
+ }
reltime.tv_sec = apr_time_sec(timeout);
reltime.tv_nsec = apr_time_usec(timeout) * 1000; /* nanoseconds */
-
do {
rc = semtimedop(mutex->os.crossproc, &proc_mutex_op_on, 1,
&reltime);
@@ -516,7 +523,8 @@ typedef struct {
static apr_status_t proc_mutex_pthread_timedacquire(apr_proc_mutex_t *mutex,
- apr_time_t timeout);
+ apr_time_t timeout,
+ int absolute);
static APR_INLINE int proc_pthread_mutex_inc(apr_proc_mutex_t *mutex)
{
@@ -700,20 +708,21 @@ static apr_status_t proc_mutex_pthread_c
static apr_status_t proc_mutex_pthread_acquire(apr_proc_mutex_t *mutex)
{
- return proc_mutex_pthread_timedacquire(mutex, -1);
+ return proc_mutex_pthread_timedacquire(mutex, -1, 0);
}
static apr_status_t proc_mutex_pthread_tryacquire(apr_proc_mutex_t *mutex)
{
- apr_status_t rv = proc_mutex_pthread_timedacquire(mutex, 0);
+ apr_status_t rv = proc_mutex_pthread_timedacquire(mutex, 0, 0);
return (rv == APR_TIMEUP) ? APR_EBUSY : rv;
}
static apr_status_t proc_mutex_pthread_timedacquire(apr_proc_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
#if !APR_USE_PROC_PTHREAD_MUTEX_COND && !defined(HAVE_PTHREAD_MUTEX_TIMEDLOCK)
- return proc_mutex_spinsleep_timedacquire(mutex, timeout);
+ return proc_mutex_spinsleep_timedacquire(mutex, timeout, absolute);
#else
apr_status_t rv;
@@ -754,11 +763,11 @@ static apr_status_t proc_mutex_pthread_t
}
else {
struct timespec abstime;
-
- timeout += apr_time_now();
+ if (!absolute) {
+ timeout += apr_time_now();
+ }
abstime.tv_sec = apr_time_sec(timeout);
abstime.tv_nsec = apr_time_usec(timeout) * 1000; /* nanoseconds */
-
rv = pthread_cond_timedwait(&proc_pthread_mutex_cond(mutex),
&proc_pthread_mutex(mutex),
&abstime);
@@ -810,11 +819,11 @@ static apr_status_t proc_mutex_pthread_t
}
else {
struct timespec abstime;
-
- timeout += apr_time_now();
+ if (!absolute) {
+ timeout += apr_time_now();
+ }
abstime.tv_sec = apr_time_sec(timeout);
abstime.tv_nsec = apr_time_usec(timeout) * 1000; /* nanoseconds */
-
rv = pthread_mutex_timedlock(&proc_pthread_mutex(mutex), &abstime);
if (rv) {
#ifdef HAVE_ZOS_PTHREADS
@@ -1565,9 +1574,10 @@ APR_DECLARE(apr_status_t) apr_proc_mutex
}
APR_DECLARE(apr_status_t) apr_proc_mutex_timedlock(apr_proc_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
- return mutex->meth->timedacquire(mutex, timeout);
+ return mutex->meth->timedacquire(mutex, timeout, absolute);
}
APR_DECLARE(apr_status_t) apr_proc_mutex_unlock(apr_proc_mutex_t *mutex)
Modified: apr/apr/branches/1.6.x/locks/unix/thread_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/unix/thread_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/unix/thread_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/unix/thread_mutex.c Tue May 23 17:41:17 2017
@@ -190,34 +190,26 @@ APR_DECLARE(apr_status_t) apr_thread_mut
}
APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
apr_status_t rv = APR_ENOTIMPL;
#ifdef HAVE_PTHREAD_MUTEX_TIMEDLOCK
if (timeout < 0) {
rv = pthread_mutex_lock(&mutex->mutex);
-#ifdef HAVE_ZOS_PTHREADS
- if (rv) {
- rv = errno;
- }
-#endif
- }
- else if (!timeout) {
- rv = pthread_mutex_trylock(&mutex->mutex);
if (rv) {
#ifdef HAVE_ZOS_PTHREADS
rv = errno;
#endif
- if (rv == EBUSY) {
- rv = APR_TIMEUP;
- }
}
}
else {
struct timespec abstime;
- timeout += apr_time_now();
+ if (!absolute) {
+ timeout += apr_time_now();
+ }
abstime.tv_sec = apr_time_sec(timeout);
abstime.tv_nsec = apr_time_usec(timeout) * 1000; /* nanoseconds */
@@ -235,6 +227,8 @@ APR_DECLARE(apr_status_t) apr_thread_mut
#else /* HAVE_PTHREAD_MUTEX_TIMEDLOCK */
if (mutex->cond) {
+ apr_status_t rv2;
+
rv = pthread_mutex_lock(&mutex->mutex);
if (rv) {
#ifdef HAVE_ZOS_PTHREADS
@@ -244,40 +238,35 @@ APR_DECLARE(apr_status_t) apr_thread_mut
}
if (mutex->locked) {
- if (!timeout) {
- rv = APR_TIMEUP;
+ mutex->num_waiters++;
+ if (timeout < 0) {
+ rv = apr_thread_cond_wait(mutex->cond, mutex);
}
else {
- mutex->num_waiters++;
- if (timeout < 0) {
- rv = apr_thread_cond_wait(mutex->cond, mutex);
- }
- else {
- rv = apr_thread_cond_timedwait(mutex->cond, mutex,
- timeout);
+ if (absolute) {
+ apr_time_t now = apr_time_now();
+ if (timeout > now) {
+ timeout -= now;
+ }
+ else {
+ timeout = 0;
+ }
}
-#ifdef HAVE_ZOS_PTHREADS
- if (rv) {
- rv = errno;
- }
-#endif
- mutex->num_waiters--;
+ rv = apr_thread_cond_timedwait(mutex->cond, mutex, timeout);
}
+ mutex->num_waiters--;
}
else {
mutex->locked = 1;
}
- if (rv) {
- pthread_mutex_unlock(&mutex->mutex);
- return rv;
- }
- rv = pthread_mutex_unlock(&mutex->mutex);
- if (rv) {
+ rv2 = pthread_mutex_unlock(&mutex->mutex);
+ if (rv2 && !rv) {
#ifdef HAVE_ZOS_PTHREADS
rv = errno;
+#else
+ rv = rv2;
#endif
- return rv;
}
}
Modified: apr/apr/branches/1.6.x/locks/win32/proc_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/win32/proc_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/win32/proc_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/win32/proc_mutex.c Tue May 23 17:41:17 2017
@@ -165,7 +165,8 @@ APR_DECLARE(apr_status_t) apr_proc_mutex
}
APR_DECLARE(apr_status_t) apr_proc_mutex_timedlock(apr_proc_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
DWORD rv;
@@ -173,6 +174,15 @@ APR_DECLARE(apr_status_t) apr_proc_mutex
rv = WaitForSingleObject(mutex->handle, INFINITE);
}
else {
+ if (absolute) {
+ apr_time_t now = apr_time_now();
+ if (timeout > now) {
+ timeout -= now;
+ }
+ else {
+ timeout = 0;
+ }
+ }
rv = WaitForSingleObject(mutex->handle, apr_time_as_msec(timeout));
if (rv == WAIT_TIMEOUT) {
return APR_TIMEUP;
Modified: apr/apr/branches/1.6.x/locks/win32/thread_mutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/locks/win32/thread_mutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/locks/win32/thread_mutex.c (original)
+++ apr/apr/branches/1.6.x/locks/win32/thread_mutex.c Tue May 23 17:41:17 2017
@@ -115,7 +115,8 @@ APR_DECLARE(apr_status_t) apr_thread_mut
}
APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex,
- apr_time_t timeout)
+ apr_time_t timeout,
+ int absolute)
{
if (mutex->type != thread_mutex_critical_section) {
DWORD rv, timeout_ms;
@@ -123,6 +124,15 @@ APR_DECLARE(apr_status_t) apr_thread_mut
timeout_ms = INFINITE;
}
else {
+ if (absolute) {
+ apr_time_t now = apr_time_now();
+ if (timeout > now) {
+ timeout -= now;
+ }
+ else {
+ timeout = 0;
+ }
+ }
timeout_ms = apr_time_as_msec(timeout);
}
rv = WaitForSingleObject(mutex->handle, timeout_ms);
Modified: apr/apr/branches/1.6.x/test/testlock.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/test/testlock.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/test/testlock.c (original)
+++ apr/apr/branches/1.6.x/test/testlock.c Tue May 23 17:41:17 2017
@@ -91,7 +91,7 @@ static void *APR_THREAD_FUNC thread_mute
while (1)
{
if (data) {
- apr_thread_mutex_timedlock(thread_mutex, *(apr_time_t *)data);
+ apr_thread_mutex_timedlock(thread_mutex, *(apr_time_t *)data, 0);
}
else {
apr_thread_mutex_lock(thread_mutex);
@@ -361,7 +361,7 @@ static void test_timeoutmutex(abts_case
ABTS_INT_EQUAL(tc, 0, apr_thread_mutex_lock(timeout_mutex));
for (i = 0; i < MAX_RETRY; i++) {
begin = apr_time_now();
- s = apr_thread_mutex_timedlock(timeout_mutex, timeout);
+ s = apr_thread_mutex_timedlock(timeout_mutex, timeout, 0);
end = apr_time_now();
if (s != APR_SUCCESS && !APR_STATUS_IS_TIMEUP(s)) {
Modified: apr/apr/branches/1.6.x/test/testlockperf.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/test/testlockperf.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/test/testlockperf.c (original)
+++ apr/apr/branches/1.6.x/test/testlockperf.c Tue May 23 17:41:17 2017
@@ -61,7 +61,7 @@ void * APR_THREAD_FUNC thread_mutex_func
for (i = 0; i < max_counter; i++) {
if (data) {
- apr_thread_mutex_timedlock(thread_lock, *(apr_time_t *)data);
+ apr_thread_mutex_timedlock(thread_lock, *(apr_time_t *)data, 0);
}
else {
apr_thread_mutex_lock(thread_lock);
Modified: apr/apr/branches/1.6.x/test/testprocmutex.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/test/testprocmutex.c?rev=1795940&r1=1795939&r2=1795940&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/test/testprocmutex.c (original)
+++ apr/apr/branches/1.6.x/test/testprocmutex.c Tue May 23 17:41:17 2017
@@ -88,7 +88,7 @@ static void make_child(abts_case *tc, in
else if (trylock < 0) {
int wait_usec = 0;
- while ((rv = apr_proc_mutex_timedlock(proc_lock, 1))) {
+ while ((rv = apr_proc_mutex_timedlock(proc_lock, 1, 0))) {
if (!APR_STATUS_IS_TIMEUP(rv))
exit(1);
if (++wait_usec >= MAX_WAIT_USEC)
@@ -184,7 +184,7 @@ static void test_exclusive(abts_case *tc
*x == MAX_COUNTER);
}
- rv = apr_proc_mutex_timedlock(proc_lock, 1);
+ rv = apr_proc_mutex_timedlock(proc_lock, 1, 0);
if (rv == APR_ENOTIMPL) {
fprintf(stderr, "%s_timedlock() not implemented, ", mech->name);
ABTS_ASSERT(tc, "Default timed timedlock not implemented",
@@ -194,7 +194,7 @@ static void test_exclusive(abts_case *tc
APR_ASSERT_SUCCESS(tc, "check for timedlock", rv);
for (n = 0; n < 2; n++) {
- rv = apr_proc_mutex_timedlock(proc_lock, 1);
+ rv = apr_proc_mutex_timedlock(proc_lock, 1, 0);
/* Some mech (eg. flock or fcntl) may succeed when the
* lock is re-acquired in the same process.
*/