this.notifyAll();
}
queueWaiter = false;
}
ErrorInformation errorInfo = null;
synchronized (queue) {
for (;;) {
DownQueueRunner currentRunner = new DownQueueRunner(queue, queue, this, locator);
executor.execute(currentRunner);
lastError = null;
for (;;) {
while (!queue.isEmpty() && (lastError == null) && (downHardCancelled == false)) {
try {
queue.wait();
}
catch (InterruptedException ie) {
throw new RuntimeException(ie);
}
}
if (downHardCancelled) {
currentRunner.caput = true;
}
if ((lastError != null) && (future != null)) {
errorInfo = invokeOnError(future, lastError, ErrorInformation.ErrorAction.IGNORE, listeners, lastErrorDescriptor);
}
lastError = null;
lastErrorDescriptor = null;
if (queue.isEmpty() || downHardCancelled) {
downHardCancelled = false;
break;
}
}
if (queue.isEmpty()) {
if (hardCancelDownTimer != null) {
hardCancelDownTimer.cancel();
}
break;
}
}
}
synchronized(this) {
queue = null;
}
if (errorInfo != null && ErrorInformation.ErrorAction.GO_TO_NEXT_LOWER_LEVEL_AND_STOP.equals(errorInfo.getAction())) {
synchronized (this) {
goingTo = workingOn;
}
}