summaryrefslogtreecommitdiff
path: root/TAO/tao
diff options
context:
space:
mode:
authorbala <balanatarajan@users.noreply.github.com>2003-12-09 01:35:48 +0000
committerbala <balanatarajan@users.noreply.github.com>2003-12-09 01:35:48 +0000
commit98393471e8834cd2fc4eb1342cd366b9b0c5d687 (patch)
tree3231278000b67d49165cf4f647f2708ad2638a79 /TAO/tao
parent45cc5f98f731753827ae448101d35acab255aed0 (diff)
downloadATCD-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.cpp2
-rw-r--r--TAO/tao/Synch_Invocation.cpp40
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