Wait and notify on the correct lock.

This commit is contained in:
Kristian S. Stangeland 2012-10-04 06:13:19 +02:00
parent db8db1fba1
commit af2d692c59

View File

@ -152,7 +152,7 @@ public class AsyncListenerHandler {
synchronized (stopLock) { synchronized (stopLock) {
stoppedTasks.remove(id); stoppedTasks.remove(id);
notifyAll(); stopLock.notifyAll();
running.set(false); running.set(false);
} }
@ -269,11 +269,13 @@ public class AsyncListenerHandler {
* @throws InterruptedException - If the current thread was interrupted. * @throws InterruptedException - If the current thread was interrupted.
*/ */
private boolean waitForStops() throws InterruptedException { private boolean waitForStops() throws InterruptedException {
synchronized (stopLock) {
while (stoppedTasks.size() > 0 && !cancelled) { while (stoppedTasks.size() > 0 && !cancelled) {
wait(); stopLock.wait();
} }
return cancelled; return cancelled;
} }
}
// DO NOT call this method from the main thread // DO NOT call this method from the main thread
private void listenerLoop(int workerID) { private void listenerLoop(int workerID) {
@ -286,10 +288,8 @@ public class AsyncListenerHandler {
try { try {
// Wait if certain threads are stopping // Wait if certain threads are stopping
synchronized (stopLock) {
if (waitForStops()) if (waitForStops())
return; return;
}
// Proceed // Proceed
started.incrementAndGet(); started.incrementAndGet();
@ -375,7 +375,7 @@ public class AsyncListenerHandler {
// Individual shut down is irrelevant now // Individual shut down is irrelevant now
synchronized (stopLock) { synchronized (stopLock) {
notifyAll(); stopLock.notifyAll();
} }
} }
} }