summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2014-07-24 14:32:00 +0200
committerBenoit Foucher <benoit@zeroc.com>2014-07-24 14:32:00 +0200
commit2d88aac37141b6649155bf7cefd926af944be132 (patch)
treea67642698dda213f0b212d6475992e02c3dcc4d7 /java/src
parentanother update to CHANGES for ICE-5515 (diff)
downloadice-2d88aac37141b6649155bf7cefd926af944be132.tar.bz2
ice-2d88aac37141b6649155bf7cefd926af944be132.tar.xz
ice-2d88aac37141b6649155bf7cefd926af944be132.zip
Fixed bug with system exceptions not being propagated correctly with collocation optimization + AMD
Diffstat (limited to 'java/src')
-rw-r--r--java/src/Ice/ConnectionI.java6
-rw-r--r--java/src/IceInternal/CollocatedRequestHandler.java18
-rw-r--r--java/src/IceInternal/IncomingBase.java9
-rw-r--r--java/src/IceInternal/ResponseHandler.java1
4 files changed, 18 insertions, 16 deletions
diff --git a/java/src/Ice/ConnectionI.java b/java/src/Ice/ConnectionI.java
index bc6fa849e22..2fab877b62e 100644
--- a/java/src/Ice/ConnectionI.java
+++ b/java/src/Ice/ConnectionI.java
@@ -1087,6 +1087,12 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne
}
}
+ public boolean
+ systemException(int requestId, Ice.SystemException ex)
+ {
+ return false; // System exceptions aren't marshalled.
+ }
+
public IceInternal.EndpointI
endpoint()
{
diff --git a/java/src/IceInternal/CollocatedRequestHandler.java b/java/src/IceInternal/CollocatedRequestHandler.java
index 1cae4d80b32..56ef165ada4 100644
--- a/java/src/IceInternal/CollocatedRequestHandler.java
+++ b/java/src/IceInternal/CollocatedRequestHandler.java
@@ -515,6 +515,14 @@ public class CollocatedRequestHandler implements RequestHandler, ResponseHandler
_adapter.decDirectCount();
}
+ public boolean
+ systemException(int requestId, Ice.SystemException ex)
+ {
+ handleException(requestId, ex);
+ _adapter.decDirectCount();
+ return true;
+ }
+
public void
invokeException(int requestId, Ice.LocalException ex, int invokeNum)
{
@@ -633,15 +641,7 @@ public class CollocatedRequestHandler implements RequestHandler, ResponseHandler
Incoming in = new Incoming(_reference.getInstance(), this, null, _adapter, _response, (byte)0,
requestId);
- try
- {
- in.invoke(servantManager, os);
- }
- catch(Ice.SystemException ex)
- {
- handleException(requestId, ex);
- _adapter.decDirectCount();
- }
+ in.invoke(servantManager, os);
--invokeNum;
}
}
diff --git a/java/src/IceInternal/IncomingBase.java b/java/src/IceInternal/IncomingBase.java
index 5190769b6ae..b29c08a6fae 100644
--- a/java/src/IceInternal/IncomingBase.java
+++ b/java/src/IceInternal/IncomingBase.java
@@ -485,14 +485,9 @@ public class IncomingBase
{
if(ex instanceof Ice.SystemException)
{
- //
- // Only rethrow the system exception if it's a collocated
- // call. For now, on-the-wire system exceptions aren't
- // supported.
- //
- if(_current.con == null)
+ if(_responseHandler.systemException(_current.requestId, (Ice.SystemException)ex))
{
- throw ex;
+ return;
}
}
diff --git a/java/src/IceInternal/ResponseHandler.java b/java/src/IceInternal/ResponseHandler.java
index 9b26f6ee2fc..88f3678b5b2 100644
--- a/java/src/IceInternal/ResponseHandler.java
+++ b/java/src/IceInternal/ResponseHandler.java
@@ -13,5 +13,6 @@ public interface ResponseHandler
{
void sendResponse(int requestId, BasicStream os, byte status);
void sendNoResponse();
+ boolean systemException(int requestId, Ice.SystemException ex);
void invokeException(int requestId, Ice.LocalException ex, int invokeNum);
};