summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/ThreadPool.java
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2002-12-16 17:41:59 +0000
committerMarc Laukien <marc@zeroc.com>2002-12-16 17:41:59 +0000
commitc04d2be3682e42bcfec93fa7f1f7bc56a4b5acbe (patch)
tree7e66c4823feb25b80c839c535a674e73f75fae36 /java/src/IceInternal/ThreadPool.java
parentCheck communicator state.' (diff)
downloadice-c04d2be3682e42bcfec93fa7f1f7bc56a4b5acbe.tar.bz2
ice-c04d2be3682e42bcfec93fa7f1f7bc56a4b5acbe.tar.xz
ice-c04d2be3682e42bcfec93fa7f1f7bc56a4b5acbe.zip
removed RecursiveMutex
Diffstat (limited to 'java/src/IceInternal/ThreadPool.java')
-rw-r--r--java/src/IceInternal/ThreadPool.java32
1 files changed, 29 insertions, 3 deletions
diff --git a/java/src/IceInternal/ThreadPool.java b/java/src/IceInternal/ThreadPool.java
index 4576880f122..6725b96690b 100644
--- a/java/src/IceInternal/ThreadPool.java
+++ b/java/src/IceInternal/ThreadPool.java
@@ -70,7 +70,17 @@ public final class ThreadPool
{
if(_multipleThreads)
{
- _threadMutex.unlock();
+ if(!_promote) // Double-checked locking.
+ {
+ synchronized(_promoteMonitor)
+ {
+ if(!_promote)
+ {
+ _promote = true;
+ _promoteMonitor.notify();
+ }
+ }
+ }
}
}
@@ -119,6 +129,7 @@ public final class ThreadPool
_destroyed = false;
_timeout = 0;
_multipleThreads = false;
+ _promote = true;
_name = name;
Network.SocketPair pair = Network.createPipe();
@@ -353,7 +364,21 @@ public final class ThreadPool
{
if(_multipleThreads)
{
- _threadMutex.lock();
+ synchronized(_promoteMonitor)
+ {
+ while(!_promote)
+ {
+ try
+ {
+ _promoteMonitor.wait();
+ }
+ catch(InterruptedException ex)
+ {
+ }
+ }
+
+ _promote = false;
+ }
if(TRACE_THREAD)
{
@@ -847,7 +872,8 @@ public final class ThreadPool
private java.util.HashMap _handlerMap = new java.util.HashMap();
private int _timeout;
private int _timeoutMillis;
- private RecursiveMutex _threadMutex = new RecursiveMutex();
+ private boolean _promote;
+ private java.lang.Object _promoteMonitor = new java.lang.Object();
private boolean _multipleThreads;
private String _name;