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) {