diff options
author | Steve Huston <shuston@riverace.com> | 2006-01-31 22:14:22 +0000 |
---|---|---|
committer | Steve Huston <shuston@riverace.com> | 2006-01-31 22:14:22 +0000 |
commit | 1349ba35ad51fafaad7ccc0d0079063401e6416e (patch) | |
tree | f82aff5ff78306ee5c22d2ff218e84a1e01de9d9 /tests | |
parent | 96ea583ca55755b27a95166c87f5b148285215fc (diff) | |
download | ATCD-1349ba35ad51fafaad7ccc0d0079063401e6416e.tar.gz |
ChangeLogTag:Tue Jan 31 22:08:57 UTC 2006 Steve Huston <shuston@riverace.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Barrier_Test.cpp | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/tests/Barrier_Test.cpp b/tests/Barrier_Test.cpp index ce2fa29cb5b..2af15dfb66d 100644 --- a/tests/Barrier_Test.cpp +++ b/tests/Barrier_Test.cpp @@ -45,7 +45,7 @@ struct Tester_Args // for all other threads to complete this iteration. static void * -tester (Tester_Args *args) +wait_tester (Tester_Args *args) { for (int iterations = 1; iterations <= args->n_iterations_; @@ -55,12 +55,30 @@ tester (Tester_Args *args) iterations)); // Block until all other threads have waited, then continue. - args->tester_barrier_.wait (); + if (args->tester_barrier_.wait () != 0) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("(%t) %p\n"), + ACE_TEXT ("wait failed"))); } return 0; } +// Wait on the barrier, expecting it to be shut down before completing +// the wait. + +static void * +shut_tester (Tester_Args *args) +{ + if (args->tester_barrier_.wait () == 0) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("(%t) wait succeeded, should have shut down\n"))); + else if (errno != ESHUTDOWN) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("(%t) wait failed, expecting ESHUTDOWN, %p\n"), + ACE_TEXT ("got"))); + return 0; +} + #endif /* ACE_HAS_THREADS */ int @@ -85,7 +103,7 @@ run_main (int, ACE_TCHAR *[]) if (ACE_Thread_Manager::instance ()->spawn_n (n_threads, - (ACE_THR_FUNC) tester, + (ACE_THR_FUNC) wait_tester, (void *) &args, THR_NEW_LWP | THR_JOINABLE) == -1) @@ -95,6 +113,21 @@ run_main (int, ACE_TCHAR *[]) ACE_Thread_Manager::instance ()->wait (); } + // Now test ACE_Barrier shutdown. Set up a barrier for n_threads, and start + // n_threads - 1 threads to wait, then shut the barrier down. + ACE_Barrier shut_barrier (n_threads); + Tester_Args shut_args (shut_barrier, 1); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Starting shutdown test threads\n"))); + if (ACE_Thread_Manager::instance ()->spawn_n + (n_threads - 1, + (ACE_THR_FUNC) shut_tester, + (void *) &shut_args, + THR_NEW_LWP | THR_JOINABLE) == -1) + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("spawn_n")), 1); + + shut_barrier.shutdown (); + ACE_Thread_Manager::instance ()->wait (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("test done\n"))); #else ACE_ERROR ((LM_INFO, |