diff options
Diffstat (limited to 'cppe/src/IceE/Outgoing.cpp')
-rw-r--r-- | cppe/src/IceE/Outgoing.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/cppe/src/IceE/Outgoing.cpp b/cppe/src/IceE/Outgoing.cpp index 7351c231ca6..dda1f5ee1e3 100644 --- a/cppe/src/IceE/Outgoing.cpp +++ b/cppe/src/IceE/Outgoing.cpp @@ -200,11 +200,16 @@ IceInternal::Outgoing::invoke() // For blocking sends the reply is written directly // into the incoming stream. // - _connection->sendBlockingRequest(&_os, &_is, this); - if(!_exception.get()) + try { + _connection->sendBlockingRequest(&_os, &_is, this); finishedInternal(); } + catch(const LocalException& ex) + { + _state = StateLocalException; + _exception.reset(dynamic_cast<LocalException*>(ex.ice_clone())); + } } #endif if(_exception.get()) @@ -486,12 +491,12 @@ IceInternal::Outgoing::finishedInternal() } } +#ifndef ICEE_PURE_BLOCKING_CLIENT + void IceInternal::Outgoing::finished(const LocalException& ex) { -#ifndef ICEE_PURE_BLOCKING_CLIENT IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); -#endif assert(_reference->getMode() == Reference::ModeTwoway); // Can only be called for twoways. @@ -499,7 +504,7 @@ IceInternal::Outgoing::finished(const LocalException& ex) _state = StateLocalException; _exception.reset(dynamic_cast<LocalException*>(ex.ice_clone())); -#ifndef ICEE_PURE_BLOCKING_CLIENT notify(); -#endif } + +#endif |