diff options
author | Marc Laukien <marc@zeroc.com> | 2002-12-16 17:41:59 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2002-12-16 17:41:59 +0000 |
commit | c04d2be3682e42bcfec93fa7f1f7bc56a4b5acbe (patch) | |
tree | 7e66c4823feb25b80c839c535a674e73f75fae36 /java/src/IceInternal/ThreadPool.java | |
parent | Check communicator state.' (diff) | |
download | ice-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.java | 32 |
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; |