From: Martin Willi Date: Mon, 21 Oct 2013 13:08:14 +0000 (+0200) Subject: unit-tests: Add a test for thread_cancellation_point() X-Git-Tag: 5.1.2dr1~33^2~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e5b34086f157ad6c4bf6086b35e85d293fe0a4a6;p=thirdparty%2Fstrongswan.git unit-tests: Add a test for thread_cancellation_point() --- diff --git a/src/libstrongswan/tests/suites/test_threading.c b/src/libstrongswan/tests/suites/test_threading.c index bf43d88c94..fffad0c18e 100644 --- a/src/libstrongswan/tests/suites/test_threading.c +++ b/src/libstrongswan/tests/suites/test_threading.c @@ -361,6 +361,38 @@ START_TEST(test_cancel_onoff) } END_TEST +static void *cancel_point_run(void *data) +{ + thread_cancelability(FALSE); + while (TRUE) + { + /* implicitly enables cancellability */ + thread_cancellation_point(); + } + return NULL; +} + +START_TEST(test_cancel_point) +{ + thread_t *threads[THREADS]; + int i; + + for (i = 0; i < THREADS; i++) + { + threads[i] = thread_create(cancel_point_run, NULL); + } + sched_yield(); + for (i = 0; i < THREADS; i++) + { + threads[i]->cancel(threads[i]); + } + for (i = 0; i < THREADS; i++) + { + threads[i]->join(threads[i]); + } +} +END_TEST + Suite *threading_suite_create() { Suite *s; @@ -385,6 +417,7 @@ Suite *threading_suite_create() tc = tcase_create("thread cancellation"); tcase_add_test(tc, test_cancel); tcase_add_test(tc, test_cancel_onoff); + tcase_add_test(tc, test_cancel_point); suite_add_tcase(s, tc); return s;