diff options
author | ivan <ivan@13f79535-47bb-0310-9956-ffa450edef68> | 2022-06-20 22:08:29 +0000 |
---|---|---|
committer | ivan <ivan@13f79535-47bb-0310-9956-ffa450edef68> | 2022-06-20 22:08:29 +0000 |
commit | 64b77e871489ca311a21e6b8ced4daf8511474d1 (patch) | |
tree | c555be654162f92328a1ab820a7f721a41ae4e5d | |
parent | 713c80a0150355c9c685b37a07a6c803daaa90fd (diff) | |
download | libapr-64b77e871489ca311a21e6b8ced4daf8511474d1.tar.gz |
On 1.8.x branch: Merge r1866300 from trunk:
Add test for WAIT_ABANDONED handling for win32 mutexes.
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/1.8.x@1902122 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | test/testlock.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/testlock.c b/test/testlock.c index 5099fb339..be9822861 100644 --- a/test/testlock.c +++ b/test/testlock.c @@ -475,6 +475,45 @@ static void test_thread_unnestedmutex(abts_case *tc, void *data) ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); } +#ifdef WIN32 +static void *APR_THREAD_FUNC +thread_win32_abandoned_mutex_function(apr_thread_t *thd, void *data) +{ + apr_thread_mutex_t *mutex = data; + apr_status_t rv; + + rv = apr_thread_mutex_lock(mutex); + + /* exit from thread without unlocking mutex. */ + apr_thread_exit(thd, rv); +} + +static void test_win32_abandoned_mutex(abts_case *tc, void *data) +{ + apr_status_t rv; + apr_thread_t *thread; + apr_thread_mutex_t *mutex; + + /* Create timed mutex: APR will create Win32 mutex object in this case. */ + rv = apr_thread_mutex_create(&mutex, APR_THREAD_MUTEX_TIMED, p); + ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); + + rv = apr_thread_create(&thread, NULL, thread_win32_abandoned_mutex_function, + mutex, p); + ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); + + apr_thread_join(&rv, thread); + ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); + + rv = apr_thread_mutex_trylock(mutex); + ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); + + rv = apr_thread_mutex_unlock (mutex); + ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); +} + +#endif + #endif /* !APR_HAS_THREADS */ #if !APR_HAS_THREADS @@ -504,6 +543,9 @@ abts_suite *testlock(abts_suite *suite) #if APR_HAS_TIMEDLOCKS abts_run_test(suite, test_timeoutmutex, NULL); #endif +#ifdef WIN32 + abts_run_test(suite, test_win32_abandoned_mutex, NULL); +#endif #endif return suite; |