diff options
author | Benoit Foucher <benoit@zeroc.com> | 2014-09-25 17:07:18 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2014-09-25 17:07:18 +0200 |
commit | 089aed778ab4002336fbada8c4dc4e8b25f33a8c (patch) | |
tree | 6188b69af9d8c58e6dbc2079ca6da9d3e5976d1a /java/src/IceInternal/RetryQueue.java | |
parent | New fix for (ICE-5583) to always use a custom chain engine (diff) | |
download | ice-089aed778ab4002336fbada8c4dc4e8b25f33a8c.tar.bz2 ice-089aed778ab4002336fbada8c4dc4e8b25f33a8c.tar.xz ice-089aed778ab4002336fbada8c4dc4e8b25f33a8c.zip |
Fixed again ICE-5687 - adapterDeactivation test warnings
Diffstat (limited to 'java/src/IceInternal/RetryQueue.java')
-rw-r--r-- | java/src/IceInternal/RetryQueue.java | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/java/src/IceInternal/RetryQueue.java b/java/src/IceInternal/RetryQueue.java index 4d6f8144410..311d53b4cc3 100644 --- a/java/src/IceInternal/RetryQueue.java +++ b/java/src/IceInternal/RetryQueue.java @@ -31,20 +31,50 @@ public class RetryQueue synchronized public void destroy() { + java.util.HashSet<RetryTask> keep = new java.util.HashSet<RetryTask>(); for(RetryTask task : _requests) { - task.destroy(); + if(!task.destroy()) + { + keep.add(task); + } } - _requests.clear(); + _requests = keep; _instance = null; + + // + // Wait for the tasks to be executed, it shouldn't take long + // since they couldn't be canceled. If interrupted, we + // preserve the interrupt. + // + boolean interrupted = false; + while(!_requests.isEmpty()) + { + try + { + wait(); + } + catch(InterruptedException ex) + { + interrupted = true; + } + } + if(interrupted) + { + Thread.currentThread().interrupt(); + } } - synchronized boolean + synchronized void remove(RetryTask task) { - return _requests.remove(task); + _requests.remove(task); + if(_instance == null && _requests.isEmpty()) + { + notify(); + } } private Instance _instance; - final private java.util.HashSet<RetryTask> _requests = new java.util.HashSet<RetryTask>(); + private java.util.HashSet<RetryTask> _requests = new java.util.HashSet<RetryTask>(); } |