From 8c69e98515bf7cebcbea5d55eabc84a8266d24ed Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Fri, 8 Oct 2010 18:15:45 +0000 Subject: [PATCH] Bug 293109 - [debug view][view model] Terminate and Relaunch action not working. --- .../cdt/dsf/gdb/launching/GdbLaunch.java | 14 ++++++++---- .../dsf/ui/viewmodel/AbstractVMProvider.java | 2 +- .../cdt/dsf/datamodel/AbstractDMContext.java | 22 ++++++++++--------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java index 1a34fc9d660..7500cfbf144 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java @@ -49,6 +49,7 @@ import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.model.IDisconnect; import org.eclipse.debug.core.model.IMemoryBlockRetrieval; @@ -287,10 +288,6 @@ public class GdbLaunch extends DsfLaunch // 283586 DebugPlugin.getDefault().fireDebugEventSet( new DebugEvent[] { new DebugEvent(fMemRetrieval, DebugEvent.TERMINATE) }); - // endSession takes a full dispatch to distribute the - // session-ended event, finish step only after the dispatch. - fExecutor.shutdown(); - fExecutor = null; fireTerminate(); rm.setStatus(getStatus()); @@ -307,4 +304,13 @@ public class GdbLaunch extends DsfLaunch Platform.getAdapterManager().loadAdapter(this, adapter.getName()); return super.getAdapter(adapter); } + + @Override + public void launchRemoved(ILaunch launch) { + if (this.equals(launch)) { + fExecutor.shutdown(); + fExecutor = null; + } + super.launchRemoved(launch); + } } diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/AbstractVMProvider.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/AbstractVMProvider.java index 71b192ff17c..89865c55e32 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/AbstractVMProvider.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/AbstractVMProvider.java @@ -347,7 +347,7 @@ abstract public class AbstractVMProvider implements IVMProvider, IVMEventListene eventInfo.fClientRm.done(); queue.fCurrentEvent = null; queue.fCurrentRm = null; - if (!queue.fEventQueue.isEmpty()) { + if (!queue.fEventQueue.isEmpty() && !fDisposed) { EventInfo nextEventInfo = queue.fEventQueue.remove(0); doHandleEvent(queue, proxyStrategy, nextEventInfo); } diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/datamodel/AbstractDMContext.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/datamodel/AbstractDMContext.java index af6f32798cb..86005e31502 100644 --- a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/datamodel/AbstractDMContext.java +++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/datamodel/AbstractDMContext.java @@ -35,15 +35,16 @@ import org.eclipse.core.runtime.PlatformObject; abstract public class AbstractDMContext extends PlatformObject implements IDMContext { - private final String fSessionId; + private final DsfSession fSession; private final IDMContext[] fParents; /** * Main constructor provides all data needed to implement the IDMContext * interface. + * @since 2.2 */ - public AbstractDMContext(String sessionId, IDMContext[] parents) { - fSessionId = sessionId; + public AbstractDMContext(DsfSession session, IDMContext[] parents) { + fSession = session; fParents = parents; for (IDMContext parent : parents) { assert(parent != null); @@ -52,7 +53,12 @@ abstract public class AbstractDMContext extends PlatformObject /** Convenience constructor */ public AbstractDMContext(IDsfService service, IDMContext[] parents) { - this(service.getSession().getId(), parents); + this(service.getSession(), parents); + } + + /** Backward compatiblity constructor */ + public AbstractDMContext(String fSessionId, IDMContext[] parents) { + this(DsfSession.getSession(fSessionId), parents); } /** @@ -110,7 +116,7 @@ abstract public class AbstractDMContext extends PlatformObject return retVal.toString(); } - public String getSessionId() { return fSessionId; } + public String getSessionId() { return fSession.getId(); } public IDMContext[] getParents() { return fParents; } /** @@ -131,11 +137,7 @@ abstract public class AbstractDMContext extends PlatformObject @Override @SuppressWarnings("rawtypes") public Object getAdapter(Class adapterType) { - Object retVal = null; - DsfSession session = DsfSession.getSession(fSessionId); - if (session != null) { - retVal = session.getModelAdapter(adapterType); - } + Object retVal = fSession.getModelAdapter(adapterType); if (retVal == null) { retVal = super.getAdapter(adapterType); }