diff options
author | Steve Huston <shuston@riverace.com> | 2002-10-04 22:44:11 +0000 |
---|---|---|
committer | Steve Huston <shuston@riverace.com> | 2002-10-04 22:44:11 +0000 |
commit | 240692ebe941a998cb7764efe9e9df6eac1b53e0 (patch) | |
tree | 9706c909dd5ba4197600174fee1cd94c8bc830bc /tests/Recursive_Condition_Test.cpp | |
parent | 0b25f8e0b50b5a8a551a38273d4ae82ff538a1b3 (diff) | |
download | ATCD-240692ebe941a998cb7764efe9e9df6eac1b53e0.tar.gz |
ChangeLogTag:Fri Oct 4 18:39:19 2002 Steve Huston <shuston@riverace.com>
Diffstat (limited to 'tests/Recursive_Condition_Test.cpp')
-rw-r--r-- | tests/Recursive_Condition_Test.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/Recursive_Condition_Test.cpp b/tests/Recursive_Condition_Test.cpp index f2c1d4ab488..3cd116b7d0f 100644 --- a/tests/Recursive_Condition_Test.cpp +++ b/tests/Recursive_Condition_Test.cpp @@ -22,6 +22,8 @@ #include "test_config.h" #include "ace/Event_Handler.h" +#include "ace/Synch.h" +#include "ace/Thread_Manager.h" #include "ace/Timer_Heap.h" #include "ace/Timer_Queue_Adapters.h" @@ -54,6 +56,19 @@ public: } }; +// These are for the second test - simple wait/signal. +ACE_SYNCH_RECURSIVE_MUTEX mutex_; +ACE_SYNCH_RECURSIVE_CONDITION condition_(mutex_); + +ACE_THR_FUNC_RETURN waiter (void *) { + ACE_ASSERT (mutex_.acquire () == 0); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) waiting for cv signal...\n"))); + condition_.wait(); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) woken up!!!\n"))); + mutex_.release (); + return 0; +} + #endif /* ACE_HAS_THREADS */ int @@ -77,6 +92,23 @@ ACE_TMAIN (int, ACE_TCHAR *[]) ACE_DEBUG ((LM_DEBUG, "[%t] timer id = %d\n", timer_id)); ACE_OS::sleep (10); + timer_queue.deactivate (); + timer_queue.wait (); + + // Now do a simple wait/signal combination across two threads. + if (ACE_Thread_Manager::instance()->spawn (waiter) == -1) + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("spawn")), 1); + + ACE_OS::sleep (2); + if (mutex_.acquire () == -1) + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), + ACE_TEXT ("mutex acquire")), + 1); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) signaling condition...\n"))); + if (condition_.signal () == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("signal"))); + mutex_.release (); + ACE_Thread_Manager::instance ()->wait (); #else ACE_ERROR ((LM_ERROR, |