summaryrefslogtreecommitdiff
path: root/locks
diff options
context:
space:
mode:
authorIvan Zhakov <ivan@apache.org>2022-06-20 22:11:34 +0000
committerIvan Zhakov <ivan@apache.org>2022-06-20 22:11:34 +0000
commit66dc65f545bfa0282be14eab2b5650b3860e5e3d (patch)
treeaf4233964af7e95c5fa6a9dacbd12fac15f7d8b8 /locks
parent22d667e1ae2186e97d421b781f36a02e7676b7d4 (diff)
downloadapr-66dc65f545bfa0282be14eab2b5650b3860e5e3d.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
Diffstat (limited to 'locks')
-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;
}