apr-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From yla...@apache.org
Subject svn commit: r1790490 - in /apr/apr/branches/1.6.x: ./ include/ include/arch/unix/ locks/beos/ locks/netware/ locks/os2/ locks/unix/ locks/win32/ test/
Date Fri, 07 Apr 2017 00:11:28 GMT
Author: ylavic
Date: Fri Apr  7 00:11:27 2017
New Revision: 1790490

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

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 Fri Apr  7 00:11:27 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
+/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
 /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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -114,12 +114,10 @@ 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 absolute time or relative timeout (microseconds)
- * @param absolute whether the timeout given is absolute (!0) or relative (0)
+ * @param timeout the relative timeout (microseconds)
  */
 APR_DECLARE(apr_status_t) apr_global_mutex_timedlock(apr_global_mutex_t *mutex,
-                                                     apr_time_t timeout,
-                                                     int absolute);
+                                                     apr_time_t timeout);
 
 /**
  * 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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -119,12 +119,10 @@ 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 absolute time or relative timeout (microseconds)
- * @param absolute whether the timeout given is absolute (!0) or relative (0)
+ * @param timeout the relative timeout (microseconds)
  */
 APR_DECLARE(apr_status_t) apr_proc_mutex_timedlock(apr_proc_mutex_t *mutex,
-                                                   apr_time_t timeout,
-                                                   int absolute);
+                                                   apr_time_t timeout);
 
 /**
  * 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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -87,12 +87,10 @@ 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 absolute time or relative timeout (microseconds)
- * @param absolute whether the timeout given is absolute (!0) or relative (0)
+ * @param timeout the relative timeout (microseconds)
  */
 APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex,
-                                                     apr_time_t timeout,
-                                                     int absolute);
+                                                     apr_time_t timeout);
 
 /**
  * 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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 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, int);
+    apr_status_t (*timedacquire)(apr_proc_mutex_t *, apr_time_t);
     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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -109,33 +109,20 @@ 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,
-                                                   int absolute)
+                                                   apr_time_t timeout)
 {
     int32 stat;
 
     if (atomic_add(&mutex->LockCount, 1) > 0) {
-        if (timeout < 0) {
+        if (!timeout) {
+            stat = B_TIMED_OUT;
+        }
+        else if (timeout < 0) {
             stat = acquire_sem(mutex->Lock);
         }
         else {
-            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);
+            stat = acquire_sem_etc(mutex->Lock, 1, B_RELATIVE_TIMEOUT,
+                                   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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -132,8 +132,7 @@ 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,
-                                                     int absolute)
+                                                     apr_time_t timeout)
 {
     int32 stat;
     thread_id me = find_thread(NULL);
@@ -144,27 +143,15 @@ APR_DECLARE(apr_status_t) apr_thread_mut
     }
     
     if (atomic_add(&mutex->LockCount, 1) > 0) {
-        if (timeout < 0) {
+        if (!timeout) {
+            stat = B_TIMED_OUT;
+        }
+        else if (timeout < 0) {
             stat = acquire_sem(mutex->Lock);
         }
         else {
-            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);
+            stat = acquire_sem_etc(mutex->Lock, 1, B_RELATIVE_TIMEOUT,
+                                   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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -73,11 +73,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,
-                                                   int absolute)
+                                                   apr_time_t timeout)
 {
     if (mutex)
-        return apr_thread_mutex_timedlock(mutex->mutex, timeout, absolute);
+        return apr_thread_mutex_timedlock(mutex->mutex, timeout);
     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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -112,30 +112,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,
-                                                     int absolute)
+                                                     apr_time_t timeout)
 {
     if (mutex->cond) {
         apr_status_t rv;
         NXLock(mutex->mutex);
         if (mutex->locked) {
-            mutex->num_waiters++;
-            if (timeout < 0) {
-                rv = apr_thread_cond_wait(mutex->cond, mutex);
+            if (!timeout) {
+                rv = APR_TIMEUP;
             }
             else {
-                if (absolute) {
-                    apr_time_t now = apr_time_now();
-                    if (timeout > now) {
-                        timeout -= now;
-                    }
-                    else {
-                        timeout = 0;
-                    }
+                mutex->num_waiters++;
+                if (timeout < 0) {
+                    rv = apr_thread_cond_wait(mutex->cond, mutex);
                 }
-                rv = apr_thread_cond_timedwait(mutex->cond, mutex, timeout);
+                else {
+                    rv = apr_thread_cond_timedwait(mutex->cond, mutex,
+                                                   timeout);
+                }
+                mutex->num_waiters--;
             }
-            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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -156,35 +156,24 @@ APR_DECLARE(apr_status_t) apr_proc_mutex
         mutex->lock_count++;
     }
 
-    return APR_FROM_OS_ERROR(rc);
+    return (rc == ERROR_TIMEOUT) ? APR_EBUSY : APR_FROM_OS_ERROR(rc);
 }
 
 
 
 APR_DECLARE(apr_status_t) apr_proc_mutex_timedlock(apr_proc_mutex_t *mutex,
-                                                   apr_time_t timeout,
-                                                   int absolute)
+                                                   apr_time_t timeout)
 {
     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) {
@@ -192,7 +181,7 @@ APR_DECLARE(apr_status_t) apr_proc_mutex
         mutex->lock_count++;
     }
 
-    return APR_FROM_OS_ERROR(rc);
+    return (rc == ERROR_TIMEOUT) ? APR_TIMEUP : 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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -66,37 +66,28 @@ 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 APR_OS2_STATUS(rc);
+
+    return (rc == ERROR_TIMEOUT) ? APR_EBUSY : APR_FROM_OS_ERROR(rc);
 }
 
 
 
 APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex,
-                                                     apr_time_t timeout,
-                                                     int absolute)
+                                                     apr_time_t timeout)
 {
     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(usec));
-        if (rc == ERROR_TIMEOUT) {
-            return APR_TIMEUP;
-        }
+        rc = DosRequestMutexSem(mutex->hMutex, apr_time_as_msec(timeout));
     }
 
-    return APR_FROM_OS_ERROR(rc);
+    return (rc == ERROR_TIMEOUT) ? APR_TIMEUP : 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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -143,27 +143,30 @@ 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,
-                                                     int absolute)
+                                                     apr_time_t timeout)
 {
     apr_status_t rv;
 
 #if APR_HAS_THREADS
     if (mutex->thread_mutex) {
-        if (timeout >= 0 && !absolute) {
-            timeout += apr_time_now();
-            absolute = 1;
+        apr_time_t expiry = 0;
+        if (timeout > 0) {
+            expiry = apr_time_now() + timeout;
         }
-        rv = apr_thread_mutex_timedlock(mutex->thread_mutex, timeout,
-                                        absolute);
+        rv = apr_thread_mutex_timedlock(mutex->thread_mutex, timeout);
         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,
-                                  absolute);
+    rv = apr_proc_mutex_timedlock(mutex->proc_mutex, timeout);
 
 #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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -56,16 +56,9 @@ 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,
-                                                      int absolute)
+                                                      apr_time_t timeout)
 {
     apr_status_t rv;
-    if (absolute) {
-        timeout -= apr_time_now();
-        if (timeout < 0) {
-            timeout = 0;
-        }
-    }
     if (timeout < 0) {
         rv = apr_proc_mutex_lock(mutex);
     }
@@ -235,19 +228,20 @@ 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,
-                                                  int absolute)
+                                                  apr_time_t timeout)
 {
     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;
 
-        if (!absolute) {
-            timeout += apr_time_now();
-        }
+        timeout += apr_time_now();
         abstime.tv_sec = apr_time_sec(timeout);
         abstime.tv_nsec = apr_time_usec(timeout) * 1000; /* nanoseconds */
         
@@ -392,23 +386,22 @@ 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,
-                                                 int absolute)
+                                                 apr_time_t timeout)
 {
     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);
@@ -523,8 +516,7 @@ typedef struct {
 
 
 static apr_status_t proc_mutex_pthread_timedacquire(apr_proc_mutex_t *mutex,
-                                                    apr_time_t timeout,
-                                                    int absolute);
+                                                    apr_time_t timeout);
 
 static APR_INLINE int proc_pthread_mutex_inc(apr_proc_mutex_t *mutex)
 {
@@ -706,21 +698,20 @@ 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, 0);
+    return proc_mutex_pthread_timedacquire(mutex, -1);
 }
 
 static apr_status_t proc_mutex_pthread_tryacquire(apr_proc_mutex_t *mutex)
 {
-    apr_status_t rv = proc_mutex_pthread_timedacquire(mutex, 0, 0);
+    apr_status_t rv = proc_mutex_pthread_timedacquire(mutex, 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,
-                                                    int absolute)
+                                                    apr_time_t timeout)
 {
 #if !APR_USE_PROC_PTHREAD_MUTEX_COND && !defined(HAVE_PTHREAD_MUTEX_TIMEDLOCK)
-    return proc_mutex_spinsleep_timedacquire(mutex, timeout, absolute);
+    return proc_mutex_spinsleep_timedacquire(mutex, timeout);
 #else
     apr_status_t rv;
 
@@ -760,11 +751,11 @@ static apr_status_t proc_mutex_pthread_t
             }
             else {
                 struct timespec abstime;
-                if (!absolute) {
-                    timeout += apr_time_now();
-                }
+
+                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);
@@ -816,11 +807,11 @@ static apr_status_t proc_mutex_pthread_t
         }
         else {
             struct timespec abstime;
-            if (!absolute) {
-                timeout += apr_time_now();
-            }
+
+            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 
@@ -1570,10 +1561,9 @@ 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,
-                                                   int absolute)
+                                                   apr_time_t timeout)
 {
-    return mutex->meth->timedacquire(mutex, timeout, absolute);
+    return mutex->meth->timedacquire(mutex, timeout);
 }
 
 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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -190,26 +190,34 @@ 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,
-                                                     int absolute)
+                                                     apr_time_t timeout)
 {
     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;
 
-        if (!absolute) {
-            timeout += apr_time_now();
-        }
+        timeout += apr_time_now();
         abstime.tv_sec = apr_time_sec(timeout);
         abstime.tv_nsec = apr_time_usec(timeout) * 1000; /* nanoseconds */
 
@@ -227,8 +235,6 @@ 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
@@ -238,35 +244,40 @@ APR_DECLARE(apr_status_t) apr_thread_mut
         }
 
         if (mutex->locked) {
-            mutex->num_waiters++;
-            if (timeout < 0) {
-                rv = apr_thread_cond_wait(mutex->cond, mutex);
+            if (!timeout) {
+                rv = APR_TIMEUP;
             }
             else {
-                if (absolute) {
-                    apr_time_t now = apr_time_now();
-                    if (timeout > now) {
-                        timeout -= now;
-                    }
-                    else {
-                        timeout = 0;
-                    }
+                mutex->num_waiters++;
+                if (timeout < 0) {
+                    rv = apr_thread_cond_wait(mutex->cond, mutex);
+                }
+                else {
+                    rv = apr_thread_cond_timedwait(mutex->cond, mutex,
+                                                   timeout);
                 }
-                rv = apr_thread_cond_timedwait(mutex->cond, mutex, timeout);
+#ifdef HAVE_ZOS_PTHREADS
+                if (rv) {
+                    rv = errno;
+                }
+#endif
+                mutex->num_waiters--;
             }
-            mutex->num_waiters--;
         }
         else {
             mutex->locked = 1;
         }
+        if (rv) {
+            pthread_mutex_unlock(&mutex->mutex);
+            return rv;
+        }
 
-        rv2 = pthread_mutex_unlock(&mutex->mutex);
-        if (rv2 && !rv) {
+        rv = pthread_mutex_unlock(&mutex->mutex);
+        if (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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -165,8 +165,7 @@ 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,
-                                                   int absolute)
+                                                   apr_time_t timeout)
 {
     DWORD rv;
 
@@ -174,15 +173,6 @@ 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=1790490&r1=1790489&r2=1790490&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 Fri Apr  7 00:11:27 2017
@@ -115,8 +115,7 @@ 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,
-                                                     int absolute)
+                                                     apr_time_t timeout)
 {
     if (mutex->type != thread_mutex_critical_section) {
         DWORD rv, timeout_ms;
@@ -124,15 +123,6 @@ 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=1790490&r1=1790489&r2=1790490&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/test/testlock.c (original)
+++ apr/apr/branches/1.6.x/test/testlock.c Fri Apr  7 00:11:27 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, 0);
+            apr_thread_mutex_timedlock(thread_mutex, *(apr_time_t *)data);
         }
         else {
             apr_thread_mutex_lock(thread_mutex);
@@ -358,7 +358,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, 0);
+        s = apr_thread_mutex_timedlock(timeout_mutex, timeout);
         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=1790490&r1=1790489&r2=1790490&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/test/testlockperf.c (original)
+++ apr/apr/branches/1.6.x/test/testlockperf.c Fri Apr  7 00:11:27 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, 0);
+            apr_thread_mutex_timedlock(thread_lock, *(apr_time_t *)data);
         }
         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=1790490&r1=1790489&r2=1790490&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/test/testprocmutex.c (original)
+++ apr/apr/branches/1.6.x/test/testprocmutex.c Fri Apr  7 00:11:27 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, 0))) {
+                while ((rv = apr_proc_mutex_timedlock(proc_lock, 1))) {
                     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, 0);
+    rv = apr_proc_mutex_timedlock(proc_lock, 1);
     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, 0);
+            rv = apr_proc_mutex_timedlock(proc_lock, 1);
             /* Some mech (eg. flock or fcntl) may succeed when the
              * lock is re-acquired in the same process.
              */



Mime
View raw message