show only one progress while indexing at a time
diff --git a/core/plugins/org.eclipse.dltk.core/index/org/eclipse/dltk/internal/core/index2/ProgressJob.java b/core/plugins/org.eclipse.dltk.core/index/org/eclipse/dltk/internal/core/index2/ProgressJob.java index 21992fd..839c8e8 100644 --- a/core/plugins/org.eclipse.dltk.core/index/org/eclipse/dltk/internal/core/index2/ProgressJob.java +++ b/core/plugins/org.eclipse.dltk.core/index/org/eclipse/dltk/internal/core/index2/ProgressJob.java
@@ -20,6 +20,7 @@ class ProgressJob extends Job { + private static transient boolean running; private JobManager jobManager; private IProgressMonitor monitor; @@ -29,19 +30,29 @@ } protected IStatus run(IProgressMonitor monitor) { - this.monitor = monitor; - monitor.beginTask(Messages.manager_indexingTask, - IProgressMonitor.UNKNOWN); - - while (!monitor.isCanceled() && (jobManager.awaitingJobsCount()) > 0) { - try { - Thread.sleep(50); - } catch (InterruptedException e) { - // ignore - } + if (running) { + // Allow only one progress job + return Status.CANCEL_STATUS; } - monitor.done(); - return Status.OK_STATUS; + running = true; + try { + this.monitor = monitor; + monitor.beginTask(Messages.manager_indexingTask, + IProgressMonitor.UNKNOWN); + + while (!monitor.isCanceled() + && (jobManager.awaitingJobsCount()) > 0) { + try { + Thread.sleep(50); + } catch (InterruptedException e) { + // ignore + } + } + monitor.done(); + return Status.OK_STATUS; + } finally { + running = false; + } } public void subTask(String message) {