diff options
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; |