diff options
author | aaron <aaron@13f79535-47bb-0310-9956-ffa450edef68> | 2002-11-18 01:59:03 +0000 |
---|---|---|
committer | aaron <aaron@13f79535-47bb-0310-9956-ffa450edef68> | 2002-11-18 01:59:03 +0000 |
commit | bf58a0179cd80de8d3c7658682ae9c505c02efbb (patch) | |
tree | d7f82a79ca7937707f1c5cdc60b915f798457947 /locks | |
parent | c7cfd3f81399c3f692e242824a04e937a7e3ad53 (diff) | |
download | libapr-bf58a0179cd80de8d3c7658682ae9c505c02efbb.tar.gz |
Rip out buggy nested-mutex code from apr_proc_mutex. This should fix subtle
problems on MP boxes (Linux in particular).
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@64040 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'locks')
-rw-r--r-- | locks/unix/proc_mutex.c | 61 |
1 files changed, 3 insertions, 58 deletions
diff --git a/locks/unix/proc_mutex.c b/locks/unix/proc_mutex.c index a2d2fbcc4..24e1da7a9 100644 --- a/locks/unix/proc_mutex.c +++ b/locks/unix/proc_mutex.c @@ -882,72 +882,17 @@ APR_DECLARE(apr_status_t) apr_proc_mutex_child_init(apr_proc_mutex_t **mutex, APR_DECLARE(apr_status_t) apr_proc_mutex_lock(apr_proc_mutex_t *mutex) { - apr_status_t rv; - -#if APR_HAS_THREADS - if (apr_os_thread_equal(mutex->owner, apr_os_thread_current())) { - mutex->owner_ref++; - return APR_SUCCESS; - } -#endif - - if ((rv = mutex->meth->acquire(mutex)) != APR_SUCCESS) { - return rv; - } - -#if APR_HAS_THREADS - mutex->owner = apr_os_thread_current(); - mutex->owner_ref = 1; -#endif - - return APR_SUCCESS; + return mutex->meth->acquire(mutex); } APR_DECLARE(apr_status_t) apr_proc_mutex_trylock(apr_proc_mutex_t *mutex) { - apr_status_t rv; - -#if APR_HAS_THREADS - if (apr_os_thread_equal(mutex->owner, apr_os_thread_current())) { - mutex->owner_ref++; - return APR_SUCCESS; - } -#endif - - if ((rv = mutex->meth->tryacquire(mutex)) != APR_SUCCESS) { - return rv; - } - -#if APR_HAS_THREADS - mutex->owner = apr_os_thread_current(); - mutex->owner_ref = 1; -#endif - - return APR_SUCCESS; + return mutex->meth->tryacquire(mutex); } APR_DECLARE(apr_status_t) apr_proc_mutex_unlock(apr_proc_mutex_t *mutex) { - apr_status_t rv; - -#if APR_HAS_THREADS - if (apr_os_thread_equal(mutex->owner, apr_os_thread_current())) { - mutex->owner_ref--; - if (mutex->owner_ref > 0) - return APR_SUCCESS; - } -#endif - - if ((rv = mutex->meth->release(mutex)) != APR_SUCCESS) { - return rv; - } - -#if APR_HAS_THREADS - memset(&mutex->owner, 0, sizeof mutex->owner); - mutex->owner_ref = 0; -#endif - - return APR_SUCCESS; + return mutex->meth->release(mutex); } APR_DECLARE(apr_status_t) apr_proc_mutex_destroy(apr_proc_mutex_t *mutex) |