summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/OutgoingAsync.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/OutgoingAsync.cpp')
-rw-r--r--cpp/src/Ice/OutgoingAsync.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp
index f215964e4d9..51887688b6a 100644
--- a/cpp/src/Ice/OutgoingAsync.cpp
+++ b/cpp/src/Ice/OutgoingAsync.cpp
@@ -241,7 +241,6 @@ IceInternal::OutgoingAsync::__finished(BasicStream& is)
case replyOK:
case replyUserException:
{
- __is->startReadEncaps();
break;
}
@@ -521,6 +520,21 @@ IceInternal::OutgoingAsync::__send()
}
void
+IceInternal::OutgoingAsync::__throwUserException()
+{
+ try
+ {
+ __is->startReadEncaps();
+ __is->throwException();
+ }
+ catch(const Ice::UserException&)
+ {
+ __is->endReadEncaps();
+ throw;
+ }
+}
+
+void
IceInternal::OutgoingAsync::handleException(const LocalExceptionWrapper& ex)
{
if(_mode == Nonmutating || _mode == Idempotent)
@@ -637,8 +651,10 @@ Ice::AMI_Object_ice_invoke::__response(bool ok) // ok == true means no user exce
vector<Byte> outParams;
try
{
+ __is->startReadEncaps();
Int sz = __is->getReadEncapsSize();
__is->readBlob(outParams, sz);
+ __is->endReadEncaps();
}
catch(const LocalException& ex)
{
@@ -673,9 +689,11 @@ Ice::AMI_Array_Object_ice_invoke::__response(bool ok) // ok == true means no use
pair<const Byte*, const Byte*> outParams;
try
{
+ __is->startReadEncaps();
Int sz = __is->getReadEncapsSize();
__is->readBlob(outParams.first, sz);
outParams.second = outParams.first + sz;
+ __is->endReadEncaps();
}
catch(const LocalException& ex)
{