summaryrefslogtreecommitdiff
path: root/tests/Recursive_Condition_Test.cpp
diff options
context:
space:
mode:
authorSteve Huston <shuston@riverace.com>2002-10-04 22:44:11 +0000
committerSteve Huston <shuston@riverace.com>2002-10-04 22:44:11 +0000
commit240692ebe941a998cb7764efe9e9df6eac1b53e0 (patch)
tree9706c909dd5ba4197600174fee1cd94c8bc830bc /tests/Recursive_Condition_Test.cpp
parent0b25f8e0b50b5a8a551a38273d4ae82ff538a1b3 (diff)
downloadATCD-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.cpp32
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,