diff options
author | ivan <ivan@13f79535-47bb-0310-9956-ffa450edef68> | 2022-06-20 22:11:34 +0000 |
---|---|---|
committer | ivan <ivan@13f79535-47bb-0310-9956-ffa450edef68> | 2022-06-20 22:11:34 +0000 |
commit | aafcb2199d946081e2c3dd661d00140816410212 (patch) | |
tree | af4233964af7e95c5fa6a9dacbd12fac15f7d8b8 | |
parent | 64b77e871489ca311a21e6b8ced4daf8511474d1 (diff) | |
download | libapr-aafcb2199d946081e2c3dd661d00140816410212.tar.gz |
On 1.8.x branch: Merge r1866302 from trunk:
Refactor win32 thread_mutex code. No functional changes intended.
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/1.8.x@1902123 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | locks/win32/thread_mutex.c | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/locks/win32/thread_mutex.c b/locks/win32/thread_mutex.c index f19152495..3a7a863e0 100644 --- a/locks/win32/thread_mutex.c +++ b/locks/win32/thread_mutex.c @@ -88,14 +88,20 @@ APR_DECLARE(apr_status_t) apr_thread_mutex_lock(apr_thread_mutex_t *mutex) { if (mutex->type == thread_mutex_critical_section) { EnterCriticalSection(&mutex->section); + return APR_SUCCESS; } else { DWORD rv = WaitForSingleObject(mutex->handle, INFINITE); - if ((rv != WAIT_OBJECT_0) && (rv != WAIT_ABANDONED)) { - return (rv == WAIT_TIMEOUT) ? APR_EBUSY : apr_get_os_error(); + if (rv == WAIT_OBJECT_0 || rv == WAIT_ABANDONED) { + return APR_SUCCESS; } - } - return APR_SUCCESS; + else if (rv == WAIT_TIMEOUT) { + return APR_EBUSY; + } + else { + return apr_get_os_error(); + } + } } APR_DECLARE(apr_status_t) apr_thread_mutex_trylock(apr_thread_mutex_t *mutex) @@ -104,14 +110,20 @@ APR_DECLARE(apr_status_t) apr_thread_mutex_trylock(apr_thread_mutex_t *mutex) if (!TryEnterCriticalSection(&mutex->section)) { return APR_EBUSY; } + return APR_SUCCESS; } else { DWORD rv = WaitForSingleObject(mutex->handle, 0); - if ((rv != WAIT_OBJECT_0) && (rv != WAIT_ABANDONED)) { - return (rv == WAIT_TIMEOUT) ? APR_EBUSY : apr_get_os_error(); + if (rv == WAIT_OBJECT_0 || rv == WAIT_ABANDONED) { + return APR_SUCCESS; } - } - return APR_SUCCESS; + else if (rv == WAIT_TIMEOUT) { + return APR_EBUSY; + } + else { + return apr_get_os_error(); + } + } } APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex, @@ -139,11 +151,16 @@ APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex, rv = WaitForSingleObject(mutex->handle, timeout_ms); } while (rv == WAIT_TIMEOUT && t > 0); - if ((rv != WAIT_OBJECT_0) && (rv != WAIT_ABANDONED)) { - return (rv == WAIT_TIMEOUT) ? APR_TIMEUP : apr_get_os_error(); + if (rv == WAIT_OBJECT_0 || rv == WAIT_ABANDONED) { + return APR_SUCCESS; } - return APR_SUCCESS; - } + else if (rv == WAIT_TIMEOUT) { + return APR_TIMEUP; + } + else { + return apr_get_os_error(); + } + } return APR_ENOTIMPL; } |