From: Tobias Brunner Date: Mon, 19 May 2014 14:06:52 +0000 (+0200) Subject: unit-tests: Sync threads with main thread in test_cleanup_cancel() X-Git-Tag: 5.2.0dr5~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9dfeb5de44f48657f2998c5fccc17ab975d0ff1;p=thirdparty%2Fstrongswan.git unit-tests: Sync threads with main thread in test_cleanup_cancel() Without synchronization threads could get canceled before they could disable their cancelability. --- diff --git a/src/libstrongswan/tests/suites/test_threading.c b/src/libstrongswan/tests/suites/test_threading.c index 844959e46d..496310c8ca 100644 --- a/src/libstrongswan/tests/suites/test_threading.c +++ b/src/libstrongswan/tests/suites/test_threading.c @@ -1215,6 +1215,8 @@ static void *cleanup_cancel_run(void *data) { thread_cancelability(FALSE); + barrier_wait(barrier); + thread_cleanup_push(cleanup3, data); thread_cleanup_push(cleanup2, data); thread_cleanup_push(cleanup1, data); @@ -1234,11 +1236,13 @@ START_TEST(test_cleanup_cancel) uintptr_t values[THREADS]; int i; + barrier = barrier_create(THREADS+1); for (i = 0; i < THREADS; i++) { values[i] = 1; threads[i] = thread_create(cleanup_cancel_run, &values[i]); } + barrier_wait(barrier); for (i = 0; i < THREADS; i++) { threads[i]->cancel(threads[i]); @@ -1248,6 +1252,7 @@ START_TEST(test_cleanup_cancel) threads[i]->join(threads[i]); ck_assert_int_eq(values[i], 4); } + barrier_destroy(barrier); } END_TEST