summaryrefslogtreecommitdiff
path: root/ACE/apps/JAWS2/JAWS/Waiter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/JAWS2/JAWS/Waiter.cpp')
-rw-r--r--ACE/apps/JAWS2/JAWS/Waiter.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/ACE/apps/JAWS2/JAWS/Waiter.cpp b/ACE/apps/JAWS2/JAWS/Waiter.cpp
new file mode 100644
index 00000000000..17a9826f1e2
--- /dev/null
+++ b/ACE/apps/JAWS2/JAWS/Waiter.cpp
@@ -0,0 +1,64 @@
+// $Id$
+
+#include "ace/Proactor.h"
+
+#include "JAWS/Waiter.h"
+#include "JAWS/IO_Handler.h"
+
+ACE_RCSID(JAWS, Waiter, "$Id$")
+
+JAWS_Waiter::JAWS_Waiter (void)
+ : iter_ (*this)
+{
+}
+
+JAWS_Waiter::~JAWS_Waiter (void)
+{
+}
+
+JAWS_Waiter_Base_Iterator &
+JAWS_Waiter::iter (void)
+{
+ return this->iter_;
+}
+
+int
+JAWS_Waiter::index (void)
+{
+#if 0
+ // A future version of ACE will support this.
+ ACE_Thread_ID tid = ACE_OS::thr_self ();
+#else
+ // Do it this way for now
+ ACE_thread_t thr_name;
+ thr_name = ACE_OS::thr_self ();
+
+ JAWS_Thread_ID tid (thr_name);
+#endif /* 0 */
+
+ return JAWS_Waiter_Base::index (tid);
+}
+
+JAWS_IO_Handler *
+JAWS_Waiter::wait_for_completion (int i)
+{
+ JAWS_IO_Handler *ioh;
+ JAWS_IO_Handler **iohptr;
+
+ iohptr = (i >= 0) ? this->find_by_index (i) : this->find_by_index (this->index ());
+
+ while (*iohptr == 0)
+ if (ACE_Proactor::instance ()->handle_events () == -1)
+ {
+ ACE_ERROR ((LM_ERROR, "%p\n", "JAWS_Waiter::wait_for_completion"));
+ return 0;
+ }
+
+ ioh = *iohptr;
+ *iohptr = 0;
+
+ ioh->lock ();
+ ioh->release ();
+ return ioh;
+}
+