diff options
Diffstat (limited to 'TAO/tao/Resume_Handle.cpp')
-rw-r--r-- | TAO/tao/Resume_Handle.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/TAO/tao/Resume_Handle.cpp b/TAO/tao/Resume_Handle.cpp index 6d86cf027e1..6ce7297a70f 100644 --- a/TAO/tao/Resume_Handle.cpp +++ b/TAO/tao/Resume_Handle.cpp @@ -1,5 +1,6 @@ #include "tao/Resume_Handle.h" #include "tao/ORB_Core.h" +#include "debug.h" #include "ace/Reactor.h" @@ -31,4 +32,50 @@ TAO_Resume_Handle::resume_handle (void) this->flag_ = TAO_HANDLE_ALREADY_RESUMED; } +void +TAO_Resume_Handle::handle_input_return_value_hook (int& return_value) +{ + // RT8248: The return value is only changed from 1 to 0 if: + // 1) the handle_input return value wants an immediate callback + // on the handle (i.e. will return "1") + // 2) this->resume_handle was already called + // 3) reactor->resume_handler was called by this->resume_handle + // The value is changed because you can't ask for an immediate callback + // on a handle that you have already given up ownership of. (RT8248) + if ( return_value == 1 && + this->flag_ == TAO_HANDLE_ALREADY_RESUMED && + this->orb_core_ && + this->orb_core_->reactor ()->resumable_handler () && + this->handle_ != ACE_INVALID_HANDLE) + { + // a return value of "1" means "call me back immediately; + // but we can't "call me back immediately" on an + // already-resumed handle + return_value = 0; + + if (TAO_debug_level > 6) + { + ACE_DEBUG ((LM_DEBUG, + "TAO (%P|%t) - Resume_Handle::handle_input_return_value_hook, " + "overriding return value of 1 with retval = %d\n", + return_value)); + } + } + else if ( return_value == -1 ) + { + // this covers the "connection close" case, where you want + // to leave the handle suspended if you're return -1 to + // remove the handle from the Reactor. (See ChangeLog entry + // Fri Dec 16 14:40:54 2005) + this->flag_ = TAO_HANDLE_LEAVE_SUSPENDED; + + if (TAO_debug_level > 6) + { + ACE_DEBUG ((LM_DEBUG, + "TAO (%P|%t) - Resume_Handle::handle_input_return_value_hook, " + "handle_input returning -1, so handle is not resumed.\n")); + } + } +} + TAO_END_VERSIONED_NAMESPACE_DECL |