From 9a0a891e6b5912585aef3ba03393f2a2d6252797 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Mon, 21 Oct 2013 17:27:49 +0200 Subject: [PATCH] unit-tests: Add condvar broadcast test --- .../tests/suites/test_threading.c | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/libstrongswan/tests/suites/test_threading.c b/src/libstrongswan/tests/suites/test_threading.c index 97e6e3303..108c4fea5 100644 --- a/src/libstrongswan/tests/suites/test_threading.c +++ b/src/libstrongswan/tests/suites/test_threading.c @@ -221,6 +221,48 @@ START_TEST(test_condvar) } END_TEST +static void *condvar_run_broad(void *data) +{ + mutex->lock(mutex); + while (sigcount < 0) + { + condvar->wait(condvar, mutex); + } + mutex->unlock(mutex); + return NULL; +} + +START_TEST(test_condvar_broad) +{ + thread_t *threads[THREADS]; + int i; + + mutex = mutex_create(MUTEX_TYPE_DEFAULT); + condvar = condvar_create(CONDVAR_TYPE_DEFAULT); + sigcount = 0; + + for (i = 0; i < THREADS; i++) + { + threads[i] = thread_create(condvar_run_broad, NULL); + } + + sched_yield(); + + mutex->lock(mutex); + sigcount = 1; + condvar->broadcast(condvar); + mutex->unlock(mutex); + + for (i = 0; i < THREADS; i++) + { + threads[i]->join(threads[i]); + } + + mutex->destroy(mutex); + condvar->destroy(condvar); +} +END_TEST + static void *join_run(void *data) { /* force some context switches */ @@ -720,6 +762,7 @@ Suite *threading_suite_create() tc = tcase_create("condvar"); tcase_add_test(tc, test_condvar); + tcase_add_test(tc, test_condvar_broad); suite_add_tcase(s, tc); tc = tcase_create("thread joining");