@@ -59,26 +59,36 @@ TEST_F(UvThreadsTestSuite, MutexStealTest) {
5959 uv_mutex_destroy (&mutex);
6060}
6161
62+ static void uvThreadTryLocksForWriteLock (void * data) {
63+ auto * lock = static_cast <uv_rwlock_t *>(data);
64+ EXPECT_NE (0 , uv_rwlock_tryrdlock (lock));
65+ EXPECT_NE (0 , uv_rwlock_trywrlock (lock));
66+ }
67+
68+ static void uvThreadTryLocksForReadLock (void * data) {
69+ auto * lock = static_cast <uv_rwlock_t *>(data);
70+ EXPECT_NE (0 , uv_rwlock_trywrlock (lock));
71+ EXPECT_EQ (0 , uv_rwlock_tryrdlock (lock)); // additional read lock on read lock should succeed
72+ uv_rwlock_rdunlock (lock);
73+ }
74+
6275TEST_F (UvThreadsTestSuite, RwlockGuardTest) {
6376 uv_rwlock_t lock;
6477 ASSERT_EQ (0 , uv_rwlock_init (&lock));
6578 celix_autoptr (uv_rwlock_t ) lockCleanup = &lock;
6679
67- #ifndef __APPLE__ // On MacOs uv_rwlock_tryrdlock and uv_rwlock_trywrlock on write locked lock results in SIGABRT
6880 {
6981 celix_auto (celix_uv_rwlock_wlock_guard_t ) writeGuard = celixUvRwlockWlockGuard_init (&lock);
70- EXPECT_NE (0 , uv_rwlock_tryrdlock (&lock));
71- EXPECT_NE (0 , uv_rwlock_trywrlock (&lock));
82+ uv_thread_t thread;
83+ ASSERT_EQ (0 , uv_thread_create (&thread, uvThreadTryLocksForWriteLock, &lock));
84+ EXPECT_EQ (0 , uv_thread_join (&thread));
7285 } // guard out of scope -> unlock write lock
73- #endif
7486
7587 {
7688 celix_auto (celix_uv_rwlock_rlock_guard_t ) readGuard = celixUvRwlockRlockGuard_init (&lock);
77-
78- EXPECT_EQ (0 , uv_rwlock_tryrdlock (&lock));
79- uv_rwlock_rdunlock (&lock);
80-
81- EXPECT_NE (0 , uv_rwlock_trywrlock (&lock));
89+ uv_thread_t thread;
90+ ASSERT_EQ (0 , uv_thread_create (&thread, uvThreadTryLocksForReadLock, &lock));
91+ EXPECT_EQ (0 , uv_thread_join (&thread));
8292 } // guard out of scope -> unlock read lock
8393
8494 ASSERT_EQ (0 , uv_rwlock_trywrlock (&lock));
0 commit comments