summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSteve Huston <shuston@riverace.com>2006-01-31 22:14:22 +0000
committerSteve Huston <shuston@riverace.com>2006-01-31 22:14:22 +0000
commit1349ba35ad51fafaad7ccc0d0079063401e6416e (patch)
treef82aff5ff78306ee5c22d2ff218e84a1e01de9d9 /tests
parent96ea583ca55755b27a95166c87f5b148285215fc (diff)
downloadATCD-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.cpp39
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,