You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by iv...@apache.org on 2019/05/28 07:44:30 UTC

svn commit: r1860190 - /apr/apr/trunk/test/testlock.c

Author: ivan
Date: Tue May 28 07:44:30 2019
New Revision: 1860190

URL: http://svn.apache.org/viewvc?rev=1860190&view=rev
Log:
Add simple tests for nested and unnested thread mutexes.

Modified:
    apr/apr/trunk/test/testlock.c

Modified: apr/apr/trunk/test/testlock.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/test/testlock.c?rev=1860190&r1=1860189&r2=1860190&view=diff
==============================================================================
--- apr/apr/trunk/test/testlock.c (original)
+++ apr/apr/trunk/test/testlock.c Tue May 28 07:44:30 2019
@@ -377,6 +377,54 @@ static void test_timeoutmutex(abts_case
                        apr_thread_mutex_destroy(timeout_mutex));
 }
 
+static void test_thread_nestedmutex(abts_case *tc, void *data)
+{
+    apr_thread_mutex_t *m;
+    apr_status_t rv;
+
+    rv = apr_thread_mutex_create(&m, APR_THREAD_MUTEX_NESTED, p);
+    ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+    ABTS_PTR_NOTNULL(tc, m);
+
+    rv = apr_thread_mutex_lock(m);
+    ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+
+    rv = apr_thread_mutex_trylock(m);
+    ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+    if (rv == APR_SUCCESS)
+    {
+        rv = apr_thread_mutex_unlock(m);
+        ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+    }
+
+    rv = apr_thread_mutex_unlock(m);
+    ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+}
+
+static void test_thread_unnestedmutex(abts_case *tc, void *data)
+{
+    apr_thread_mutex_t *m;
+    apr_status_t rv;
+
+    rv = apr_thread_mutex_create(&m, APR_THREAD_MUTEX_UNNESTED, p);
+    ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+    ABTS_PTR_NOTNULL(tc, m);
+
+    rv = apr_thread_mutex_lock(m);
+    ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+
+    rv = apr_thread_mutex_trylock(m);
+    ABTS_INT_EQUAL(tc, APR_EBUSY, rv);
+    if (rv == APR_SUCCESS)
+    {
+        rv = apr_thread_mutex_unlock(m);
+        ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+    }
+
+    rv = apr_thread_mutex_unlock(m);
+    ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+}
+
 #endif /* !APR_HAS_THREADS */
 
 #if !APR_HAS_THREADS
@@ -396,6 +444,8 @@ abts_suite *testlock(abts_suite *suite)
 #else
     abts_run_test(suite, test_thread_mutex, NULL);
     abts_run_test(suite, test_thread_timedmutex, NULL);
+    abts_run_test(suite, test_thread_nestedmutex, NULL);
+    abts_run_test(suite, test_thread_unnestedmutex, NULL);
     abts_run_test(suite, test_thread_rwlock, NULL);
     abts_run_test(suite, test_cond, NULL);
     abts_run_test(suite, test_timeoutcond, NULL);