From de27defb840d8a34927d3f920258aec426e518f6 Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Mon, 4 Apr 2011 01:47:58 +0000 Subject: [PATCH] Bug 340601 - Detaching from a process needs to stop a running program --- .../org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java | 5 +++++ .../org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_2.java | 5 +++++ .../src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java index 477ff4b7bcd..def6dba6d18 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java @@ -925,6 +925,11 @@ public class GDBProcesses_7_0 extends AbstractDsfService return; } + IMIRunControl runControl = getServicesTracker().getService(IMIRunControl.class); + if (runControl != null && !runControl.isTargetAcceptingCommands()) { + fBackend.interrupt(); + } + fCommandControl.queueCommand( fCommandFactory.createMITargetDetach(controlDmc, procDmc.getProcId()), new DataRequestMonitor(getExecutor(), rm)); 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 bd00c02810a..a4b6e38f494 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 @@ -259,6 +259,11 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 { return; } + IMIRunControl runControl = getServicesTracker().getService(IMIRunControl.class); + if (runControl != null && !runControl.isTargetAcceptingCommands()) { + fBackend.interrupt(); + } + fCommandControl.queueCommand( fCommandFactory.createMITargetDetach(controlDmc, containerDmc.getGroupId()), new DataRequestMonitor(getExecutor(), rm) { diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java index 3262a6967da..a137a902447 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java @@ -547,6 +547,11 @@ public class MIProcesses extends AbstractDsfService implements IMIProcesses, ICa ICommandControlDMContext controlDmc = DMContexts.getAncestorOfType(dmc, ICommandControlDMContext.class); if (controlDmc != null) { + IMIRunControl runControl = getServicesTracker().getService(IMIRunControl.class); + if (runControl != null && !runControl.isTargetAcceptingCommands()) { + fGdbBackend.interrupt(); + } + // This service version cannot use -target-detach because it didn't exist // in versions of GDB up to and including GDB 6.8 fCommandControl.queueCommand(