diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2008-11-05 12:21:24 -0330 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2008-11-05 12:21:24 -0330 |
commit | e67bc9d134e2727e1da51729665c672904daf6c0 (patch) | |
tree | 784284319746e5e4a807c469c50ed5c8b671193d /cpp/src/Ice/OutgoingAsync.cpp | |
parent | Merge branch 'R3_3_branch' (diff) | |
parent | Bug 3386 - slice errors with wrong line numbers (diff) | |
download | ice-e67bc9d134e2727e1da51729665c672904daf6c0.tar.bz2 ice-e67bc9d134e2727e1da51729665c672904daf6c0.tar.xz ice-e67bc9d134e2727e1da51729665c672904daf6c0.zip |
Merge branch 'R3_3_branch'
Diffstat (limited to 'cpp/src/Ice/OutgoingAsync.cpp')
-rw-r--r-- | cpp/src/Ice/OutgoingAsync.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp index 788cb2cb373..3ef1a299197 100644 --- a/cpp/src/Ice/OutgoingAsync.cpp +++ b/cpp/src/Ice/OutgoingAsync.cpp @@ -24,6 +24,7 @@ #include <Ice/ReplyStatus.h> #include <Ice/ImplicitContextI.h> #include <Ice/ThreadPool.h> +#include <Ice/RetryQueue.h> using namespace std; using namespace Ice; @@ -454,6 +455,24 @@ IceInternal::OutgoingAsync::__finished(const LocalExceptionWrapper& exc) } } +void +IceInternal::OutgoingAsync::__retry(int interval) +{ + // + // This method is called by the proxy to retry an invocation, no + // other threads can access this object. + // + if(interval > 0) + { + assert(__os); + __os->instance()->retryQueue()->add(this, interval); + } + else + { + __send(); + } +} + bool IceInternal::OutgoingAsync::__send() { @@ -466,11 +485,11 @@ IceInternal::OutgoingAsync::__send() } catch(const LocalExceptionWrapper& ex) { - handleException(ex); + handleException(ex); // Might call __send() again upon retry and assign _sentSynchronously } catch(const Ice::LocalException& ex) { - handleException(ex); + handleException(ex); // Might call __send() again upon retry and assign _sentSynchronously } return _sentSynchronously; } @@ -483,6 +502,7 @@ IceInternal::OutgoingAsync::__prepare(const ObjectPrx& prx, const string& operat _delegate = 0; _cnt = 0; _mode = mode; + _sentSynchronously = false; // // Can't call async via a batch proxy. |