summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/DispatchInterceptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/DispatchInterceptor.cpp')
-rw-r--r--cpp/src/Ice/DispatchInterceptor.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/cpp/src/Ice/DispatchInterceptor.cpp b/cpp/src/Ice/DispatchInterceptor.cpp
index 10457e990e9..78e79311631 100644
--- a/cpp/src/Ice/DispatchInterceptor.cpp
+++ b/cpp/src/Ice/DispatchInterceptor.cpp
@@ -21,4 +21,17 @@ Ice::DispatchInterceptor::_iceDispatch(IceInternal::Incoming& in, const Current&
{
return false;
}
+ catch(const std::exception&)
+ {
+ //
+ // If the input parameters weren't read, make sure we skip them here. It's needed to read the
+ // encoding version used by the client to eventually marshal the user exception. It's also needed
+ // if we dispatch a batch oneway request to read the next batch request.
+ //
+ if(in.getCurrent().encoding.major == 0 && in.getCurrent().encoding.minor == 0)
+ {
+ in.skipReadParams();
+ }
+ throw;
+ }
}