diff options
Diffstat (limited to 'TAO/tao/Messaging/Asynch_Reply_Dispatcher.cpp')
-rw-r--r-- | TAO/tao/Messaging/Asynch_Reply_Dispatcher.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/TAO/tao/Messaging/Asynch_Reply_Dispatcher.cpp b/TAO/tao/Messaging/Asynch_Reply_Dispatcher.cpp index 90a1c4223a7..1f1c099cb99 100644 --- a/TAO/tao/Messaging/Asynch_Reply_Dispatcher.cpp +++ b/TAO/tao/Messaging/Asynch_Reply_Dispatcher.cpp @@ -6,6 +6,7 @@ #include "tao/debug.h" #include "tao/ORB_Core.h" #include "tao/Transport.h" +#include "tao/Transport_Mux_Strategy.h" TAO_BEGIN_VERSIONED_NAMESPACE_DECL @@ -42,6 +43,13 @@ TAO_Asynch_Reply_Dispatcher::dispatch_reply (TAO_Pluggable_Reply_Params ¶ms) // AMI Timeout Handling End } + // With Asynch requests the invocation handler can't call idle_after_reply () + // since it does not handle the reply. + // So we have to do that here in case f.i. the Exclusive TMS left the transport + // busy after the send + if (this->transport_ != 0) + this->transport_->tms ()->idle_after_reply (); + if (!params.input_cdr_) return -1; @@ -67,7 +75,7 @@ TAO_Asynch_Reply_Dispatcher::dispatch_reply (TAO_Pluggable_Reply_Params ¶ms) } // See whether we need to delete the data block by checking the - // flags. We cannot be happy that we initally allocated the + // flags. We cannot be happy that we initially allocated the // datablocks of the stack. If this method is called twice, as is in // some cases where the same invocation object is used to make two // invocations like forwarding, the release becomes essential. @@ -203,6 +211,13 @@ TAO_Asynch_Reply_Dispatcher::reply_timed_out (void) this->timeout_handler_ = 0; } + // With Asynch requests the invocation handler can't call idle_after_reply () + // since it does not handle the reply. + // So we have to do that here in case f.i. the Exclusive TMS left the transport + // busy after the send + if (this->transport_ != 0) + this->transport_->tms ()->idle_after_reply (); + // This is okay here... Everything relies on our refcount being // held by the timeout handler, whose refcount in turn is held // by the reactor. |