diff options
Diffstat (limited to 'cppe/src')
-rwxr-xr-x | cppe/src/IceE/Connection.cpp | 2 | ||||
-rw-r--r-- | cppe/src/IceE/Outgoing.cpp | 17 |
2 files changed, 12 insertions, 7 deletions
diff --git a/cppe/src/IceE/Connection.cpp b/cppe/src/IceE/Connection.cpp index 239b0e62771..e535956b6f2 100755 --- a/cppe/src/IceE/Connection.cpp +++ b/cppe/src/IceE/Connection.cpp @@ -424,7 +424,7 @@ Ice::Connection::sendBlockingRequest(BasicStream* os, BasicStream* is, Outgoing* } _transceiver = 0; - out->finished(*_exception.get()); + _exception->ice_throw(); } } } 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 |