diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java index 7c5ddf8a59f..37024d81c3a 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java @@ -330,7 +330,10 @@ abstract public class AbstractVMLayoutNode implements IVMLayoutNode { * that the layout node depends on, are not available. */ protected boolean checkUpdate(IViewerUpdate update) { - if (update.isCanceled()) return false; + if (update.isCanceled()) { + update.done(); + return false; + } if (fDisposed) { handleFailedUpdate(update); return false; diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java index 2313a542c90..63e16d44853 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java @@ -159,7 +159,7 @@ abstract public class AbstractVMProvider implements IVMProvider if (layoutNode == null) { // Stale update, most likely as a result of the layout nodes being // changed. Just ignore it. - if (!update.isCanceled()) update.done(); + update.done(); continue; } if (!nodeUpdatesMap.containsKey(layoutNode)) { @@ -240,7 +240,10 @@ abstract public class AbstractVMProvider implements IVMProvider public void update(final IChildrenCountUpdate[] updates) { for (final IChildrenCountUpdate update : updates) { - if (update.isCanceled()) continue; + if (update.isCanceled()) { + update.done(); + continue; + } getChildrenCountsForNode( update, @@ -346,7 +349,7 @@ abstract public class AbstractVMProvider implements IVMProvider final IVMLayoutNode layoutNode = getLayoutNodeForElement(update.getElement()); if (layoutNode == null) { // Stale update. Just ignore. - if (!update.isCanceled()) update.done(); + update.done(); return; } @@ -356,7 +359,7 @@ abstract public class AbstractVMProvider implements IVMProvider new MultiRequestMonitor(getExecutor(), null) { @Override protected void handleCompleted() { - if (!update.isCanceled()) update.done(); + update.done(); } }; diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMElementsCountUpdate.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMElementsCountUpdate.java index 8c599f90e10..2ae96edb483 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMElementsCountUpdate.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMElementsCountUpdate.java @@ -34,7 +34,7 @@ public class VMElementsCountUpdate extends VMViewerUpdate implements IChildrenCo @Override public void done() { - assert fCountRequestMonitor.getData() != null || !fCountRequestMonitor.getStatus().isOK(); + assert isCanceled() || fCountRequestMonitor.getData() != null || !fCountRequestMonitor.getStatus().isOK(); super.done(); } diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMHasElementsUpdate.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMHasElementsUpdate.java index 2153473ff11..b466b8d5717 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMHasElementsUpdate.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMHasElementsUpdate.java @@ -34,7 +34,7 @@ public class VMHasElementsUpdate extends VMViewerUpdate implements IHasChildrenU @Override public void done() { - assert fHasElemsRequestMonitor.getData() != null || !fHasElemsRequestMonitor.getStatus().isOK(); + assert isCanceled() || fHasElemsRequestMonitor.getData() != null || !fHasElemsRequestMonitor.getStatus().isOK(); super.done(); } } diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMViewerUpdate.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMViewerUpdate.java index 6512fb3ec4d..2da11734ebc 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMViewerUpdate.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMViewerUpdate.java @@ -13,7 +13,9 @@ package org.eclipse.dd.dsf.ui.viewmodel; import java.util.concurrent.RejectedExecutionException; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.dd.dsf.concurrent.RequestMonitor; +import org.eclipse.dd.dsf.ui.DsfUIPlugin; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; @@ -46,6 +48,9 @@ public class VMViewerUpdate implements IViewerUpdate { public void done() { try { + if ( isCanceled() ) { + fRequestMonitor.setStatus(new Status( IStatus.CANCEL, DsfUIPlugin.PLUGIN_ID," Update was cancelled") ); //$NON-NLS-1$ + } fRequestMonitor.done(); } catch (RejectedExecutionException e) { // Ignore }