diff options
author | bala <balanatarajan@users.noreply.github.com> | 2003-12-09 01:35:48 +0000 |
---|---|---|
committer | bala <balanatarajan@users.noreply.github.com> | 2003-12-09 01:35:48 +0000 |
commit | 98393471e8834cd2fc4eb1342cd366b9b0c5d687 (patch) | |
tree | 3231278000b67d49165cf4f647f2708ad2638a79 /TAO/tao | |
parent | 45cc5f98f731753827ae448101d35acab255aed0 (diff) | |
download | ATCD-98393471e8834cd2fc4eb1342cd366b9b0c5d687.tar.gz |
ChangeLogTag:Mon Dec 8 19:33:03 2003 Balachandran Natarajan <bala@dre.vanderbilt.edu>
Diffstat (limited to 'TAO/tao')
-rw-r--r-- | TAO/tao/Messaging/Asynch_Invocation.cpp | 2 | ||||
-rw-r--r-- | TAO/tao/Synch_Invocation.cpp | 40 |
2 files changed, 27 insertions, 15 deletions
diff --git a/TAO/tao/Messaging/Asynch_Invocation.cpp b/TAO/tao/Messaging/Asynch_Invocation.cpp index 21fde283895..d7801b73489 100644 --- a/TAO/tao/Messaging/Asynch_Invocation.cpp +++ b/TAO/tao/Messaging/Asynch_Invocation.cpp @@ -138,8 +138,6 @@ namespace TAO if (s != TAO_INVOKE_SUCCESS) return s; - - // NOTE: Not sure how things are handles with exclusive muxed // strategy. if (this->resolver_.transport ()->idle_after_send ()) diff --git a/TAO/tao/Synch_Invocation.cpp b/TAO/tao/Synch_Invocation.cpp index 61ef228ee83..55e8702a383 100644 --- a/TAO/tao/Synch_Invocation.cpp +++ b/TAO/tao/Synch_Invocation.cpp @@ -111,6 +111,7 @@ namespace TAO ACE_TRY_CHECK; #if TAO_HAS_INTERCEPTORS == 1 + // @@NOTE: Too much code repetition. // If the above call returns a restart due to connection // failure then call the receive_other interception point // before we leave. @@ -122,12 +123,11 @@ namespace TAO if (tmp != TAO_INVOKE_SUCCESS) s = tmp; + + return s; } #endif /*TAO_HAS_INTERCEPTORS */ - if (s != TAO_INVOKE_SUCCESS) - return s; - countdown.update (); // For some strategies one may want to release the transport @@ -160,6 +160,21 @@ namespace TAO ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; +#if TAO_HAS_INTERCEPTORS == 1 + if (s == TAO_INVOKE_RESTART) + { + Invocation_Status tmp = + this->receive_other_interception (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + // Push the latest values for the return.. + if (tmp != TAO_INVOKE_SUCCESS) + s = tmp; + + return s; + } +#endif /*TAO_HAS_INTERCEPTORS */ + // What happens when the above call returns an error through // the return value? That would be bogus as per the contract // in the interface. The call violated the contract @@ -174,22 +189,21 @@ namespace TAO this->resolver_.transport_released (); #if TAO_HAS_INTERCEPTORS == 1 - if (s == TAO_INVOKE_SUCCESS) + Invocation_Status tmp = TAO_INVOKE_FAILURE; + if (s == TAO_INVOKE_RESTART) { - s = - this->receive_reply_interception (ACE_ENV_SINGLE_ARG_PARAMETER); + tmp = + this->receive_other_interception (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_TRY_CHECK; } - else if (s == TAO_INVOKE_RESTART) + else if (s == TAO_INVOKE_SUCCESS) { - s = - this->receive_other_interception (ACE_ENV_SINGLE_ARG_PARAMETER); + tmp = + this->receive_reply_interception (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_TRY_CHECK; } - // What about other values of "s"? The method called should - // have returned an exception instead of trying to communicate - // using return values, since that is the contract in the - // interface. + if (tmp != TAO_INVOKE_SUCCESS) + s = tmp; #endif /*TAO_HAS_INTERCEPTORS */ } ACE_CATCHANY |