summaryrefslogtreecommitdiff
path: root/TAO/tao/Asynch_Invocation.cpp
diff options
context:
space:
mode:
authormk1 <mk1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-07-22 17:30:31 +0000
committermk1 <mk1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-07-22 17:30:31 +0000
commit093a3a5abdcfe1f3909b51fe46f85bf8ba82eb95 (patch)
treed217b4cdd70544b8ab5645e476a6ac42c0d1871e /TAO/tao/Asynch_Invocation.cpp
parent045b5279597d9b1435c11a3d53cf13b063c11592 (diff)
downloadATCD-093a3a5abdcfe1f3909b51fe46f85bf8ba82eb95.tar.gz
ChangeLogTag: Sun Jul 20 12:30:00 2001 Michael Kircher <Michael.Kircher@mchp.siemens.de>
Diffstat (limited to 'TAO/tao/Asynch_Invocation.cpp')
-rw-r--r--TAO/tao/Asynch_Invocation.cpp56
1 files changed, 34 insertions, 22 deletions
diff --git a/TAO/tao/Asynch_Invocation.cpp b/TAO/tao/Asynch_Invocation.cpp
index eec74ba8c59..d36f84ba290 100644
--- a/TAO/tao/Asynch_Invocation.cpp
+++ b/TAO/tao/Asynch_Invocation.cpp
@@ -82,36 +82,48 @@ int
TAO_GIOP_Twoway_Asynch_Invocation::invoke_i (CORBA::Environment &ACE_TRY_ENV)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- // Register a reply dispatcher for this Asynch_Invocation. Use the
- // heap allocated reply dispatcher.
+ int retval = 0;
- int retval =
- this->transport_->tms ()->bind_dispatcher (this->op_details_.request_id (),
- this->rd_);
- if (retval == -1)
+ // Only do the following steps if we have a valid reply dispatcher installed.
+ // In cases where no reply handler got installed, no reply dispatcher will
+ // have been set up. The ORB will drop replies to which it cannot associate
+ // a reply dispatcher.
+
+ if (this->rd_)
{
- // @@ What is the right way to handle this error?
- this->close_connection ();
- ACE_THROW_RETURN (CORBA::INTERNAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_NO),
- TAO_INVOKE_EXCEPTION);
- }
+ // Register a reply dispatcher for this Asynch_Invocation. Use the
+ // heap allocated reply dispatcher.
- // Lets remember the transport for later, so that we can idle the transport
- // when the reply dispatcher goes away.
- this->rd_->transport (this->transport_);
+ retval =
+ this->transport_->tms ()->bind_dispatcher (this->op_details_.request_id (),
+ this->rd_);
+ if (retval == -1)
+ {
+ // @@ What is the right way to handle this error?
+ this->close_connection ();
+ ACE_THROW_RETURN (CORBA::INTERNAL (TAO_DEFAULT_MINOR_CODE,
+ CORBA::COMPLETED_NO),
+ TAO_INVOKE_EXCEPTION);
+ }
- // AMI Timeout Handling Begin
+ // Lets remember the transport for later, so that we can idle the transport
+ // when the reply dispatcher goes away.
+ this->rd_->transport (this->transport_);
- if (this->max_wait_time_ != 0)
- {
- this->rd_->schedule_timer (this->op_details_.request_id (),
- *this->max_wait_time_);
- }
- // AMI Timeout Handling End
+ // AMI Timeout Handling Begin
+
+ if (this->max_wait_time_ != 0)
+ {
+ this->rd_->schedule_timer (this->op_details_.request_id (),
+ *this->max_wait_time_);
+ }
+
+ // AMI Timeout Handling End
+
+ } // if (this->rd_)
// Just send the request, without trying to wait for the reply.
retval = TAO_GIOP_Invocation::invoke (0,