summaryrefslogtreecommitdiff
path: root/locks
diff options
context:
space:
mode:
authoraaron <aaron@13f79535-47bb-0310-9956-ffa450edef68>2002-11-18 01:59:03 +0000
committeraaron <aaron@13f79535-47bb-0310-9956-ffa450edef68>2002-11-18 01:59:03 +0000
commitbf58a0179cd80de8d3c7658682ae9c505c02efbb (patch)
treed7f82a79ca7937707f1c5cdc60b915f798457947 /locks
parentc7cfd3f81399c3f692e242824a04e937a7e3ad53 (diff)
downloadlibapr-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.c61
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)