diff options
author | Benoit Foucher <benoit@zeroc.com> | 2014-07-24 14:32:00 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2014-07-24 14:32:00 +0200 |
commit | 2d88aac37141b6649155bf7cefd926af944be132 (patch) | |
tree | a67642698dda213f0b212d6475992e02c3dcc4d7 /java/src | |
parent | another update to CHANGES for ICE-5515 (diff) | |
download | ice-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.java | 6 | ||||
-rw-r--r-- | java/src/IceInternal/CollocatedRequestHandler.java | 18 | ||||
-rw-r--r-- | java/src/IceInternal/IncomingBase.java | 9 | ||||
-rw-r--r-- | java/src/IceInternal/ResponseHandler.java | 1 |
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); }; |