Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractModelProxy.java10
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java23
2 files changed, 28 insertions, 5 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractModelProxy.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractModelProxy.java
index e70f23d9c..5160d4531 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractModelProxy.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractModelProxy.java
@@ -160,12 +160,12 @@ public abstract class AbstractModelProxy implements IModelProxy2 {
return Status.OK_STATUS;
}
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.core.runtime.jobs.Job#shouldRun()
- */
@Override
+ public boolean belongsTo(Object family) {
+ return AbstractModelProxy.this == family;
+ }
+
+ @Override
public boolean shouldRun() {
return !isDisposed();
}
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