diff options
Diffstat (limited to 'ACE/apps/JAWS2/JAWS/Reaper.cpp')
-rw-r--r-- | ACE/apps/JAWS2/JAWS/Reaper.cpp | 45 |
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; +} |