diff options
author | Michi Henning <michi@zeroc.com> | 2007-10-29 16:57:02 +1000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2007-10-29 16:57:02 +1000 |
commit | 3d0c83b386b37331de7069430049aec4944451c9 (patch) | |
tree | 4fb024d1b638e88c63ba655c6d4348211e588b59 /cpp/src/Ice/IncomingAsync.cpp | |
parent | Merge branch 'master' of cvs:/home/git/ice (diff) | |
download | ice-3d0c83b386b37331de7069430049aec4944451c9.tar.bz2 ice-3d0c83b386b37331de7069430049aec4944451c9.tar.xz ice-3d0c83b386b37331de7069430049aec4944451c9.zip |
Bug 2522.
Diffstat (limited to 'cpp/src/Ice/IncomingAsync.cpp')
-rw-r--r-- | cpp/src/Ice/IncomingAsync.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/cpp/src/Ice/IncomingAsync.cpp b/cpp/src/Ice/IncomingAsync.cpp index 0db1a4acaf6..c479c034399 100644 --- a/cpp/src/Ice/IncomingAsync.cpp +++ b/cpp/src/Ice/IncomingAsync.cpp @@ -138,7 +138,31 @@ IceInternal::IncomingAsync::__servantLocatorFinished() { if(_locator && _servant) { - _locator->finished(_current, _servant, _cookie); + try + { + _locator->finished(_current, _servant, _cookie); + } + catch(const UserException& ex) + { + // + // The operation may have already marshaled a reply; we must overwrite that reply. + // + if(_response) + { + _os.endWriteEncaps(); + _os.b.resize(headerSize + 4); // Reply status position. + _os.write(replyUserException); + _os.startWriteEncaps(); + _os.write(ex); + _os.endWriteEncaps(); + _connection->sendResponse(&_os, _compress); + } + else + { + _connection->sendNoResponse(); + } + return false; + } } return true; } |