Skip to content

Commit 23a3408

Browse files
committed
gh-769: Move trylock test for rwlock to in sep thread
1 parent feb9d8e commit 23a3408

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

libs/utils/gtest/src/UvThreadsTestSuite.cc

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
6275
TEST_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

Comments
 (0)