+ check_process_default_mutex_policy(_PTHREAD_MUTEX_POLICY_FAIRSHARE);
+}
+
+static void *
+mutex_as_semaphore_signaller(void *arg)
+{
+ pthread_mutex_t *mtx = arg;
+ int rc = pthread_mutex_unlock(mtx);
+ T_ASSERT_POSIX_ZERO(rc, "unlock");
+
+ return NULL;
+}
+
+T_DECL(mutex_as_semaphore_lock_owned, "Recursively lock a normal mutex to use as a semaphore")
+{
+ pthread_t signaller;
+ pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
+ int rc = pthread_mutex_lock(&mtx);
+ T_ASSERT_POSIX_ZERO(rc, "lock");
+
+ rc = pthread_create(&signaller, NULL, mutex_as_semaphore_signaller, &mtx);
+ T_ASSERT_POSIX_ZERO(rc, "create");
+
+ rc = pthread_mutex_lock(&mtx);
+ T_ASSERT_POSIX_ZERO(rc, "recursive lock");
+
+ rc = pthread_join(signaller, NULL);
+ T_ASSERT_POSIX_ZERO(rc, "join");
+
+ T_END;