diff options
author | Matthew Newhook <matthew@zeroc.com> | 2014-08-07 14:36:07 -0230 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2014-08-07 14:36:07 -0230 |
commit | b36ae21c88735cbd2c39c5ccde2572a8fcc4e928 (patch) | |
tree | dfd5eee6e7d61a9c6efcbaabe916639009aaa9af /java/src/IceInternal/BatchOutgoing.java | |
parent | Add @Override where possible, and remove trailing white space. (diff) | |
download | ice-b36ae21c88735cbd2c39c5ccde2572a8fcc4e928.tar.bz2 ice-b36ae21c88735cbd2c39c5ccde2572a8fcc4e928.tar.xz ice-b36ae21c88735cbd2c39c5ccde2572a8fcc4e928.zip |
ICE-1593 Handling thread interrupts in Java
- Added Ice.BackgroundIO property to perform all IO in a non-user
thread. This makes Ice for Java interrupt safe. This is implemented
by the QueueRequestHanbler.
- EndpointHostResolver now uses an executor instead of a thread.
- Added java/demo/Ice/interrupt and java/test/Ice/interrupt.
- Made several changes that must be ported to C++ & C#.
- InvocationTimeout exceptions can hang forever.
- Connection establishment is always asynchronous.
- RequestHandler.requestTimeout and asyncRequestTimeout have been
renamed to requestCancel and asyncRequestCancel.
Diffstat (limited to 'java/src/IceInternal/BatchOutgoing.java')
-rw-r--r-- | java/src/IceInternal/BatchOutgoing.java | 44 |
1 files changed, 11 insertions, 33 deletions
diff --git a/java/src/IceInternal/BatchOutgoing.java b/java/src/IceInternal/BatchOutgoing.java index a3294769e56..a5f958eb10b 100644 --- a/java/src/IceInternal/BatchOutgoing.java +++ b/java/src/IceInternal/BatchOutgoing.java @@ -35,6 +35,7 @@ public final class BatchOutgoing implements OutgoingMessageCallback public void invoke() + throws InterruptedException { assert(_proxy != null || _connection != null); @@ -49,13 +50,7 @@ public final class BatchOutgoing implements OutgoingMessageCallback { while(_exception == null && !_sent) { - try - { - wait(); - } - catch(InterruptedException ex) - { - } + wait(); } if(_exception != null) { @@ -68,7 +63,7 @@ public final class BatchOutgoing implements OutgoingMessageCallback RequestHandler handler = null; try { - handler = _proxy.__getRequestHandler(false); + handler = _proxy.__getRequestHandler(); if(handler.sendRequest(this)) { return; @@ -84,17 +79,11 @@ public final class BatchOutgoing implements OutgoingMessageCallback long deadline = now + timeout; while(_exception == null && !_sent && !timedOut) { - try - { - wait(deadline - now); - if(_exception == null && !_sent) - { - now = Time.currentMonotonicTimeMillis(); - timedOut = now >= deadline; - } - } - catch(InterruptedException ex) + wait(deadline - now); + if(_exception == null && !_sent) { + now = Time.currentMonotonicTimeMillis(); + timedOut = now >= deadline; } } } @@ -102,32 +91,21 @@ public final class BatchOutgoing implements OutgoingMessageCallback { while(_exception == null && !_sent) { - try - { - wait(); - } - catch(InterruptedException ex) - { - } + wait(); } } } if(timedOut) { - handler.requestTimedOut(this); - - synchronized(this) + if(handler.requestCanceled(this, new Ice.InvocationTimeoutException())) { - while(_exception == null) + synchronized(this) { - try + while(_exception == null) { wait(); } - catch(InterruptedException ex) - { - } } } } |