summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan@13f79535-47bb-0310-9956-ffa450edef68>2022-06-20 22:11:34 +0000
committerivan <ivan@13f79535-47bb-0310-9956-ffa450edef68>2022-06-20 22:11:34 +0000
commitaafcb2199d946081e2c3dd661d00140816410212 (patch)
treeaf4233964af7e95c5fa6a9dacbd12fac15f7d8b8
parent64b77e871489ca311a21e6b8ced4daf8511474d1 (diff)
downloadlibapr-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.c41
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;
}