test: add tests for the uv_rwlock implementation
PR-URL: https://github.com/libuv/libuv/pull/525 Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
This commit is contained in:
parent
9c307cc630
commit
1ad6ad7ada
@ -291,6 +291,7 @@ TEST_DECLARE (threadpool_cancel_single)
|
|||||||
TEST_DECLARE (thread_local_storage)
|
TEST_DECLARE (thread_local_storage)
|
||||||
TEST_DECLARE (thread_mutex)
|
TEST_DECLARE (thread_mutex)
|
||||||
TEST_DECLARE (thread_rwlock)
|
TEST_DECLARE (thread_rwlock)
|
||||||
|
TEST_DECLARE (thread_rwlock_trylock)
|
||||||
TEST_DECLARE (thread_create)
|
TEST_DECLARE (thread_create)
|
||||||
TEST_DECLARE (thread_equal)
|
TEST_DECLARE (thread_equal)
|
||||||
TEST_DECLARE (dlerror)
|
TEST_DECLARE (dlerror)
|
||||||
@ -707,6 +708,7 @@ TASK_LIST_START
|
|||||||
TEST_ENTRY (thread_local_storage)
|
TEST_ENTRY (thread_local_storage)
|
||||||
TEST_ENTRY (thread_mutex)
|
TEST_ENTRY (thread_mutex)
|
||||||
TEST_ENTRY (thread_rwlock)
|
TEST_ENTRY (thread_rwlock)
|
||||||
|
TEST_ENTRY (thread_rwlock_trylock)
|
||||||
TEST_ENTRY (thread_create)
|
TEST_ENTRY (thread_create)
|
||||||
TEST_ENTRY (thread_equal)
|
TEST_ENTRY (thread_equal)
|
||||||
TEST_ENTRY (dlerror)
|
TEST_ENTRY (dlerror)
|
||||||
|
|||||||
@ -61,3 +61,62 @@ TEST_IMPL(thread_rwlock) {
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TEST_IMPL(thread_rwlock_trylock) {
|
||||||
|
uv_rwlock_t rwlock;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = uv_rwlock_init(&rwlock);
|
||||||
|
ASSERT(r == 0);
|
||||||
|
|
||||||
|
/* No locks held. */
|
||||||
|
|
||||||
|
r = uv_rwlock_trywrlock(&rwlock);
|
||||||
|
ASSERT(r == 0);
|
||||||
|
|
||||||
|
/* Write lock held. */
|
||||||
|
|
||||||
|
r = uv_rwlock_tryrdlock(&rwlock);
|
||||||
|
ASSERT(r == UV_EBUSY);
|
||||||
|
r = uv_rwlock_trywrlock(&rwlock);
|
||||||
|
ASSERT(r == UV_EBUSY);
|
||||||
|
|
||||||
|
uv_rwlock_wrunlock(&rwlock);
|
||||||
|
|
||||||
|
/* No locks held. */
|
||||||
|
|
||||||
|
r = uv_rwlock_tryrdlock(&rwlock);
|
||||||
|
ASSERT(r == 0);
|
||||||
|
|
||||||
|
/* One read lock held. */
|
||||||
|
|
||||||
|
r = uv_rwlock_tryrdlock(&rwlock);
|
||||||
|
ASSERT(r == 0);
|
||||||
|
|
||||||
|
/* Two read locks held. */
|
||||||
|
|
||||||
|
r = uv_rwlock_trywrlock(&rwlock);
|
||||||
|
ASSERT(r == UV_EBUSY);
|
||||||
|
|
||||||
|
uv_rwlock_rdunlock(&rwlock);
|
||||||
|
|
||||||
|
/* One read lock held. */
|
||||||
|
|
||||||
|
uv_rwlock_rdunlock(&rwlock);
|
||||||
|
|
||||||
|
/* No read locks held. */
|
||||||
|
|
||||||
|
r = uv_rwlock_trywrlock(&rwlock);
|
||||||
|
ASSERT(r == 0);
|
||||||
|
|
||||||
|
/* Write lock held. */
|
||||||
|
|
||||||
|
uv_rwlock_wrunlock(&rwlock);
|
||||||
|
|
||||||
|
/* No locks held. */
|
||||||
|
|
||||||
|
uv_rwlock_destroy(&rwlock);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user