summaryrefslogtreecommitdiff
path: root/ACE/apps/JAWS2/JAWS/Reaper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/JAWS2/JAWS/Reaper.cpp')
-rw-r--r--ACE/apps/JAWS2/JAWS/Reaper.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/ACE/apps/JAWS2/JAWS/Reaper.cpp b/ACE/apps/JAWS2/JAWS/Reaper.cpp
new file mode 100644
index 00000000000..98814408447
--- /dev/null
+++ b/ACE/apps/JAWS2/JAWS/Reaper.cpp
@@ -0,0 +1,45 @@
+// $Id$
+
+#include "JAWS/Reaper.h"
+#include "JAWS/Concurrency.h"
+#include "JAWS/IO_Acceptor.h"
+
+
+
+JAWS_Reaper::JAWS_Reaper (JAWS_Concurrency_Base *concurrency)
+ : concurrency_ (concurrency),
+ waiting_ (0)
+{
+}
+
+JAWS_Reaper::~JAWS_Reaper (void)
+{
+}
+
+int
+JAWS_Reaper::open (void *)
+{
+ if (this->waiting_ == 0)
+ {
+ ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, g ,this->lock_, -1);
+ if (this->waiting_ == 0)
+ {
+ if (this->activate () == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "JAWS_Reaper::activate"),
+ -1);
+ this->waiting_ = 1;
+ }
+ }
+ return 0;
+}
+
+int
+JAWS_Reaper::svc (void)
+{
+ ACE_TRACE ("JAWS_Reaper::svc");
+ int result = this->concurrency_->thr_mgr ()->wait ();
+ JAWS_IO_Synch_Acceptor_Singleton::instance ()->close ();
+ JAWS_IO_Asynch_Acceptor_Singleton::instance ()->close ();
+ ACE_DEBUG ((LM_DEBUG, "(%t) Leaving REAPER\n"));
+ return result;
+}