diff options
Diffstat (limited to 'TAO/tao/Messaging/Asynch_Timeout_Handler.cpp')
-rw-r--r-- | TAO/tao/Messaging/Asynch_Timeout_Handler.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/TAO/tao/Messaging/Asynch_Timeout_Handler.cpp b/TAO/tao/Messaging/Asynch_Timeout_Handler.cpp new file mode 100644 index 00000000000..f72a1d46d85 --- /dev/null +++ b/TAO/tao/Messaging/Asynch_Timeout_Handler.cpp @@ -0,0 +1,78 @@ +// $Id$ + + +#include "tao/Messaging/Asynch_Timeout_Handler.h" + +#include "tao/Messaging/Asynch_Reply_Dispatcher.h" +#include "tao/Transport_Mux_Strategy.h" +#include "ace/Reactor.h" + +ACE_RCSID (Messaging, + Asynch_Timeout_Handler, + "$Id$") + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +TAO_Asynch_Timeout_Handler::TAO_Asynch_Timeout_Handler ( + TAO_Asynch_Reply_Dispatcher_Base *rd, + ACE_Reactor *reactor) + : rd_ (rd), + tms_ (0), + request_id_ (0), + reactor_ (reactor) +{ + // Enable reference counting on the event handler. + this->reference_counting_policy ().value ( + ACE_Event_Handler::Reference_Counting_Policy::ENABLED); + + // We own a reference + (void) this->rd_->incr_refcount (); +} + +TAO_Asynch_Timeout_Handler::~TAO_Asynch_Timeout_Handler () +{ + // Forget rd's reference + (void) this->rd_->decr_refcount (); +} + + +long +TAO_Asynch_Timeout_Handler::schedule_timer (TAO_Transport_Mux_Strategy *tms, + CORBA::ULong request_id, + const ACE_Time_Value &max_wait_time) +{ + // Remember them for later. + this->tms_ = tms; + this->request_id_ = request_id; + + return this->reactor_->schedule_timer (this, // handler + 0, // arg + max_wait_time); +} + +int +TAO_Asynch_Timeout_Handler::handle_timeout (const ACE_Time_Value &, + const void *) +{ + this->tms_->unbind_dispatcher (request_id_); + + this->rd_->reply_timed_out (); + + // reset any possible timeout errno + errno = 0; + + // we are unregistered anyway + return 0; +} + +void +TAO_Asynch_Timeout_Handler::cancel () +{ + // The tms_ is only set if we got scheduled. + if (this->tms_) + { + this->reactor_->cancel_timer (this); + } +} + +TAO_END_VERSIONED_NAMESPACE_DECL |