summaryrefslogtreecommitdiff
path: root/TAO/tao/Messaging/Asynch_Reply_Dispatcher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Messaging/Asynch_Reply_Dispatcher.cpp')
-rw-r--r--TAO/tao/Messaging/Asynch_Reply_Dispatcher.cpp17
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 &params)
// 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 &params)
}
// 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.