diff options
author | Benoit Foucher <benoit@zeroc.com> | 2017-06-01 09:26:44 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2017-06-01 09:26:44 +0200 |
commit | 19077d22e78f93212445c6969045e736b4a466d7 (patch) | |
tree | 484d4b0dc9a791c9f8f0c4b3dbf212856aba1f55 /cpp/src/Ice/OutgoingAsync.cpp | |
parent | Updated recursive mutex check (diff) | |
download | ice-19077d22e78f93212445c6969045e736b4a466d7.tar.bz2 ice-19077d22e78f93212445c6969045e736b4a466d7.tar.xz ice-19077d22e78f93212445c6969045e736b4a466d7.zip |
Fixed ICE-7941 - scheduleCallback now provides the connection to the dispatcher work item, fixed naming of AsyncResult private methods
Diffstat (limited to 'cpp/src/Ice/OutgoingAsync.cpp')
-rw-r--r-- | cpp/src/Ice/OutgoingAsync.cpp | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp index 209092b5c4b..60d4cc04983 100644 --- a/cpp/src/Ice/OutgoingAsync.cpp +++ b/cpp/src/Ice/OutgoingAsync.cpp @@ -471,7 +471,7 @@ OutgoingAsyncBase::throwLocalException() const } bool -OutgoingAsyncBase::waitForResponse() +OutgoingAsyncBase::_waitForResponse() { Lock sync(_m); if(_state & EndCalled) @@ -492,32 +492,32 @@ OutgoingAsyncBase::waitForResponse() } Ice::InputStream* -OutgoingAsyncBase::startReadParams() +OutgoingAsyncBase::_startReadParams() { _is.startEncapsulation(); return &_is; } void -OutgoingAsyncBase::endReadParams() +OutgoingAsyncBase::_endReadParams() { _is.endEncapsulation(); } void -OutgoingAsyncBase::readEmptyParams() +OutgoingAsyncBase::_readEmptyParams() { _is.skipEmptyEncapsulation(); } void -OutgoingAsyncBase::readParamEncaps(const ::Ice::Byte*& encaps, ::Ice::Int& sz) +OutgoingAsyncBase::_readParamEncaps(const ::Ice::Byte*& encaps, ::Ice::Int& sz) { _is.readEncapsulation(encaps, sz); } void -OutgoingAsyncBase::throwUserException() +OutgoingAsyncBase::_throwUserException() { try { @@ -532,23 +532,25 @@ OutgoingAsyncBase::throwUserException() } void -OutgoingAsyncBase::scheduleCallback(const CallbackPtr& cb) +OutgoingAsyncBase::_scheduleCallback(const CallbackPtr& cb) { + // + // NOTE: for internal use only. This should only be called when the invocation has + // completed. Accessing _cachedConnection is not safe otherwise. + // + class WorkItem : public DispatchWorkItem { public: - WorkItem(const CallbackPtr& cb) : _cb(cb) {} + WorkItem(const ConnectionPtr& connection, const CallbackPtr& cb) : + DispatchWorkItem(connection), _cb(cb) + { + } virtual void run() { - try - { - _cb->run(); - } - catch(...) - { - } + _cb->run(); } private: @@ -559,7 +561,7 @@ OutgoingAsyncBase::scheduleCallback(const CallbackPtr& cb) // // CommunicatorDestroyedException is the only exception that can propagate directly from this method. // - _instance->clientThreadPool()->dispatch(new WorkItem(cb)); + _instance->clientThreadPool()->dispatch(new WorkItem(_cachedConnection, cb)); } #endif |