Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java23
1 files changed, 23 insertions, 0 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java
index 7936998e1..9afed3627 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java
@@ -15,6 +15,7 @@ import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
@@ -99,10 +100,32 @@ public class ThreadEventHandler extends DebugEventHandler {
default:
break;
}
+
+ // wait until initialization is completed before sending suspend
+ // event, see bug 491174 comment 1
+ waitForProxyInitialization();
+
fireDeltaUpdatingSelectedFrame(thread, IModelDelta.NO_CHANGE | extras, event);
}
}
+ private void waitForProxyInitialization() {
+ AbstractModelProxy modelProxy = getModelProxy();
+ if (modelProxy == null) {
+ return;
+ }
+ Job[] proxyInitJobs = Job.getJobManager().find(modelProxy);
+ while (proxyInitJobs.length > 0) {
+ try {
+ Thread.sleep(10);
+ } catch (InterruptedException e) {
+ // cancel waiting, something bad is happened
+ break;
+ }
+ proxyInitJobs = Job.getJobManager().find(modelProxy);
+ }
+ }
+
private boolean isEqual(Object o1, Object o2) {
if (o1 == o2) {
return true;

Back to the top