Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Khouzam2011-04-10 02:09:58 +0000
committerMarc Khouzam2011-04-10 02:09:58 +0000
commit3e9fb77a50ffa974efba9745de91b5368363c83d (patch)
tree1950daf4e989ed86e6fdf6826abbf8557bb02dbb /dsf-gdb/org.eclipse.cdt.dsf.gdb
parentc0f8b0d48ca6424c7a8102d5d892541f32a3d44d (diff)
downloadorg.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.java24
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);
+ }
}

Back to the top