From 5862d4025c30bf900937942ee1ffc6c26d2a923e Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Sat, 23 Jan 2010 00:16:00 +0000 Subject: [PATCH] [283586] Traditional Rendering are not disposed after Memory Browser is closed or Debug Session is terminated. --- .../eclipse/cdt/dsf/gdb/launching/GdbLaunch.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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 56c0ce638f1..4b120124deb 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 @@ -41,10 +41,13 @@ import org.eclipse.cdt.dsf.service.DsfServiceEventHandler; import org.eclipse.cdt.dsf.service.DsfServicesTracker; import org.eclipse.cdt.dsf.service.DsfSession; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; +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; import org.eclipse.debug.core.ILaunchConfiguration; @@ -263,6 +266,19 @@ public class GdbLaunch extends DsfLaunch // DsfMemoryBlockRetrieval.saveMemoryBlocks(); fMemRetrieval.saveMemoryBlocks(); + // Fire a terminate event for the memory retrieval object so + // that the hosting memory views can clean up. See 255120 and + // 283586 + new Job("Dispatch GDB Memory retrieval terminate event.") { //$NON-NLS-1$ + { setSystem(true); } + + @Override + protected IStatus run(IProgressMonitor monitor) { + DebugPlugin.getDefault().fireDebugEventSet( new DebugEvent[] { new DebugEvent(fMemRetrieval, DebugEvent.TERMINATE) }); + return Status.OK_STATUS; + } + }.schedule(); + // endSession takes a full dispatch to distribute the // session-ended event, finish step only after the dispatch. fExecutor.shutdown();