diff options
author | Marc Khouzam | 2011-04-10 02:09:58 +0000 |
---|---|---|
committer | Marc Khouzam | 2011-04-10 02:09:58 +0000 |
commit | 3e9fb77a50ffa974efba9745de91b5368363c83d (patch) | |
tree | 1950daf4e989ed86e6fdf6826abbf8557bb02dbb /dsf-gdb/org.eclipse.cdt.dsf.gdb | |
parent | c0f8b0d48ca6424c7a8102d5d892541f32a3d44d (diff) | |
download | org.eclipse.cdt-3e9fb77a50ffa974efba9745de91b5368363c83d.tar.gz org.eclipse.cdt-3e9fb77a50ffa974efba9745de91b5368363c83d.tar.xz org.eclipse.cdt-3e9fb77a50ffa974efba9745de91b5368363c83d.zip |
Bug 336890: [multi-process] Should stop tracking breakpoints when a process is no longer being debugged
Diffstat (limited to 'dsf-gdb/org.eclipse.cdt.dsf.gdb')
-rw-r--r-- | dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_2.java | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_2.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_2.java index a4b6e38f494..2cd5aedbc8e 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_2.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_2.java @@ -20,6 +20,8 @@ import org.eclipse.cdt.dsf.concurrent.Sequence; import org.eclipse.cdt.dsf.datamodel.DMContexts; import org.eclipse.cdt.dsf.datamodel.IDMContext; import org.eclipse.cdt.dsf.debug.service.IBreakpoints.IBreakpointsTargetDMContext; +import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext; +import org.eclipse.cdt.dsf.debug.service.IRunControl.IExitedDMEvent; import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext; import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants; import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin; @@ -28,12 +30,13 @@ import org.eclipse.cdt.dsf.mi.service.IMICommandControl; import org.eclipse.cdt.dsf.mi.service.IMIContainerDMContext; import org.eclipse.cdt.dsf.mi.service.IMIProcessDMContext; import org.eclipse.cdt.dsf.mi.service.IMIRunControl; +import org.eclipse.cdt.dsf.mi.service.IMIRunControl.MIRunMode; import org.eclipse.cdt.dsf.mi.service.MIBreakpointsManager; import org.eclipse.cdt.dsf.mi.service.MIProcesses; -import org.eclipse.cdt.dsf.mi.service.IMIRunControl.MIRunMode; import org.eclipse.cdt.dsf.mi.service.command.CommandFactory; import org.eclipse.cdt.dsf.mi.service.command.output.MIAddInferiorInfo; import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo; +import org.eclipse.cdt.dsf.service.DsfServiceEventHandler; import org.eclipse.cdt.dsf.service.DsfSession; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; @@ -314,5 +317,24 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 { Map<String, Object> attributes, DataRequestMonitor<IDMContext> rm) { return new DebugNewProcessSequence_7_2(executor, isInitial, dmc, file, attributes, rm); } + + /** + * @since 4.0 + */ + @DsfServiceEventHandler + @Override + public void eventDispatched(IExitedDMEvent e) { + IDMContext dmc = e.getDMContext(); + if (dmc instanceof IContainerDMContext) { + // A process has died, we should stop tracking its breakpoints + if (fBackend.getSessionType() != SessionType.CORE) { + IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(dmc, IBreakpointsTargetDMContext.class); + MIBreakpointsManager bpmService = getServicesTracker().getService(MIBreakpointsManager.class); + bpmService.stopTrackingBreakpoints(bpTargetDmc, new RequestMonitor(ImmediateExecutor.getInstance(), null)); + } + } + + super.eventDispatched(e); + } } |