diff options
author | Matthew Newhook <matthew@zeroc.com> | 2014-10-01 12:47:13 -0230 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2014-10-01 12:47:13 -0230 |
commit | 7f35ba1420d2ccf8ed40d57b6dadc3fad2509d79 (patch) | |
tree | dfa1173236b7b6928611fe540de89bce4703d359 /java/src/IceInternal/ThreadPool.java | |
parent | Lots of minor fixes, few simplifications to OutgoingAsync code (diff) | |
download | ice-7f35ba1420d2ccf8ed40d57b6dadc3fad2509d79.tar.bz2 ice-7f35ba1420d2ccf8ed40d57b6dadc3fad2509d79.tar.xz ice-7f35ba1420d2ccf8ed40d57b6dadc3fad2509d79.zip |
Use selector.wakeup() instead of a socket pair to wake the selector.
Diffstat (limited to 'java/src/IceInternal/ThreadPool.java')
-rw-r--r-- | java/src/IceInternal/ThreadPool.java | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/java/src/IceInternal/ThreadPool.java b/java/src/IceInternal/ThreadPool.java index 291f2973e3b..7ac3440f732 100644 --- a/java/src/IceInternal/ThreadPool.java +++ b/java/src/IceInternal/ThreadPool.java @@ -191,7 +191,6 @@ public final class ThreadPool _priority = priority; _workQueue = new ThreadPoolWorkQueue(_instance, this, _selector); - _nextHandler = _handlers.iterator(); if(_instance.traceLevels().threadPool >= 1) @@ -378,14 +377,8 @@ public final class ThreadPool } // - // TODO: MJN: InterruptedException leads to a leak as the - // work queue and selector are not destroyed? - // - - // // Destroy the selector // - _workQueue.close(); _selector.destroy(); } @@ -417,21 +410,25 @@ public final class ThreadPool } else if(select) { - try - { - _selector.select(handlers, _serverIdleTime); - } - catch(Selector.TimeoutException ex) + if(_workQueue.size() == 0) { - synchronized(this) + try + { + _selector.select(handlers, _serverIdleTime); + } + catch(Selector.TimeoutException ex) { - if(!_destroyed && _inUse == 0) + synchronized(this) { - _workQueue.queue(new ShutdownWorkItem()); // Select timed-out. + if(!_destroyed && _inUse == 0) + { + _workQueue.queue(new ShutdownWorkItem()); // Select timed-out. + } + continue; } - continue; } } + _workQueue.update(handlers); } synchronized(this) |