diff options
author | Martin Willi <martin@revosec.ch> | 2013-10-22 17:32:33 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-11-06 10:31:05 +0100 |
commit | f644b9e8536f0331967eba63c05f293c86ba4de8 (patch) | |
tree | 46f906e5878a05a4fb06003d1002f7d311bfa5e1 | |
parent | dac31fe1a0126df786650ed33859a38e0e297562 (diff) | |
download | strongswan-f644b9e8536f0331967eba63c05f293c86ba4de8.tar.bz2 strongswan-f644b9e8536f0331967eba63c05f293c86ba4de8.tar.xz |
unit-tests: Add a rwlock condvar test
-rw-r--r-- | src/libstrongswan/tests/suites/test_threading.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/libstrongswan/tests/suites/test_threading.c b/src/libstrongswan/tests/suites/test_threading.c index 37b2bd05d..830410e77 100644 --- a/src/libstrongswan/tests/suites/test_threading.c +++ b/src/libstrongswan/tests/suites/test_threading.c @@ -23,6 +23,7 @@ #include <threading/mutex.h> #include <threading/condvar.h> #include <threading/rwlock.h> +#include <threading/rwlock_condvar.h> #include <threading/thread_value.h> /******************************************************************************* @@ -507,6 +508,51 @@ START_TEST(test_rwlock) } END_TEST +/** + * Rwlock condvar + */ +static rwlock_condvar_t *rwcond; + +static void *rwlock_condvar_run(void *data) +{ + rwlock->write_lock(rwlock); + sigcount++; + rwcond->signal(rwcond); + rwlock->unlock(rwlock); + return NULL; +} + +START_TEST(test_rwlock_condvar) +{ + thread_t *threads[THREADS]; + int i; + + rwlock = rwlock_create(RWLOCK_TYPE_DEFAULT); + rwcond = rwlock_condvar_create(); + sigcount = 0; + + for (i = 0; i < THREADS; i++) + { + threads[i] = thread_create(rwlock_condvar_run, NULL); + } + + rwlock->write_lock(rwlock); + while (sigcount < THREADS) + { + rwcond->wait(rwcond, rwlock); + } + rwlock->unlock(rwlock); + + for (i = 0; i < THREADS; i++) + { + threads[i]->join(threads[i]); + } + + rwlock->destroy(rwlock); + rwcond->destroy(rwcond); +} +END_TEST + static void *join_run(void *data) { /* force some context switches */ @@ -1017,6 +1063,10 @@ Suite *threading_suite_create() tcase_add_test(tc, test_rwlock); suite_add_tcase(s, tc); + tc = tcase_create("rwlock condvar"); + tcase_add_test(tc, test_rwlock_condvar); + suite_add_tcase(s, tc); + tc = tcase_create("thread joining"); tcase_add_test(tc, test_join); tcase_add_test(tc, test_join_exit); |