summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/ThreadPool.java
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2014-10-01 12:47:13 -0230
committerMatthew Newhook <matthew@zeroc.com>2014-10-01 12:47:13 -0230
commit7f35ba1420d2ccf8ed40d57b6dadc3fad2509d79 (patch)
treedfa1173236b7b6928611fe540de89bce4703d359 /java/src/IceInternal/ThreadPool.java
parentLots of minor fixes, few simplifications to OutgoingAsync code (diff)
downloadice-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.java29
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)