Bug 535686 - wait for pending ElementContentProvider jobs

Before triggering another update round via doModelChanged(), wait for
all previously scheduled ElementContentProvider jobs, so that they can
read the model data before it changes again.

Change-Id: I2534d140c295341f3a69793254b6f94d5e7ef04e
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
index 0aae646..e6b5e82 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
@@ -27,10 +27,12 @@
 import org.eclipse.core.runtime.ISafeRunnable;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.SafeRunner;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.model.elements.ElementContentProvider;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ICheckboxModelProxy;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
@@ -451,7 +453,7 @@
 					DebugUIPlugin.trace("Delayed queue size: " + fQueue.size()); //$NON-NLS-1$
 				}
 			}
-			schedule(50);
+			schedule();
 		}
 
 		public void shutdown() {
@@ -488,6 +490,11 @@
                 doModelChanged(delta, proxy);
             }
             else {
+				try {
+					Job.getJobManager().join(ElementContentProvider.class, null);
+				} catch (OperationCanceledException | InterruptedException e) {
+					DebugUIPlugin.log(new Status(IStatus.WARNING, DebugUIPlugin.getUniqueIdentifier(), "Interrupted while waiting on ElementContentProvider jobs", e)); //$NON-NLS-1$
+				}
 				fDelayedDoModelChangeJob.runDelayed(delta, proxy);
             }
         }