diff options
author | Matthew Newhook <matthew@zeroc.com> | 2014-09-27 16:31:46 -0700 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2014-09-27 16:32:21 -0700 |
commit | 4951bbabdd6bd33a8e9ca0cdd46aad613a634626 (patch) | |
tree | 8634b14a258d2c9cee0e17a12af805e1af3fec76 /java/src/Ice/ObjectPrxHelperBase.java | |
parent | Fixed deadlock in connection binding code (ICE-5693) (diff) | |
download | ice-4951bbabdd6bd33a8e9ca0cdd46aad613a634626.tar.bz2 ice-4951bbabdd6bd33a8e9ca0cdd46aad613a634626.tar.xz ice-4951bbabdd6bd33a8e9ca0cdd46aad613a634626.zip |
- begin_ now never interrupts.
- All potentially blocking Ice APIs are interruption points.
- Fixes to the incoming/outgoing factories and shutdown procedure
- Fixed bug where connect() was from a user thread.
- Added lots more tests to the interrupt test suite.
Diffstat (limited to 'java/src/Ice/ObjectPrxHelperBase.java')
-rw-r--r-- | java/src/Ice/ObjectPrxHelperBase.java | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/java/src/Ice/ObjectPrxHelperBase.java b/java/src/Ice/ObjectPrxHelperBase.java index 82d138470b0..031a2608466 100644 --- a/java/src/Ice/ObjectPrxHelperBase.java +++ b/java/src/Ice/ObjectPrxHelperBase.java @@ -11,9 +11,13 @@ package Ice; import java.util.LinkedList; import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import Ice.Instrumentation.InvocationObserver; import IceInternal.QueueRequestHandler; +import IceInternal.RequestHandler; import IceInternal.RetryException; /** @@ -2280,6 +2284,10 @@ public class ObjectPrxHelperBase implements ObjectPrx, java.io.Serializable { final InvocationObserver observer = IceInternal.ObserverHelper.get(this, "ice_getConnection"); int cnt = 0; + if(Thread.interrupted()) + { + throw new Ice.OperationInterruptedException(); + } try { while(true) @@ -2779,7 +2787,11 @@ public class ObjectPrxHelperBase implements ObjectPrx, java.io.Serializable { synchronized(this) { - if(_requestHandler != handler) + if(_requestHandler == null) + { + _requestHandler = handler; + } + else if(_requestHandler != handler) { // // Update the request handler only if "previous" is the same |