diff options
author | mk1 <mk1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-07-22 17:30:31 +0000 |
---|---|---|
committer | mk1 <mk1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-07-22 17:30:31 +0000 |
commit | 093a3a5abdcfe1f3909b51fe46f85bf8ba82eb95 (patch) | |
tree | d217b4cdd70544b8ab5645e476a6ac42c0d1871e /TAO/tao/Asynch_Invocation.cpp | |
parent | 045b5279597d9b1435c11a3d53cf13b063c11592 (diff) | |
download | ATCD-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.cpp | 56 |
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, |