Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 339047
Collapse All | Expand All

(-)src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java (-2 / +3 lines)
Lines 43-53 Link Here
43
import org.eclipse.cdt.dsf.mi.service.IMIExecutionDMContext;
43
import org.eclipse.cdt.dsf.mi.service.IMIExecutionDMContext;
44
import org.eclipse.cdt.dsf.mi.service.IMIProcessDMContext;
44
import org.eclipse.cdt.dsf.mi.service.IMIProcessDMContext;
45
import org.eclipse.cdt.dsf.mi.service.IMIProcesses;
45
import org.eclipse.cdt.dsf.mi.service.IMIProcesses;
46
import org.eclipse.cdt.dsf.mi.service.IMIRunControl;
46
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsManager;
47
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsManager;
47
import org.eclipse.cdt.dsf.mi.service.MIProcesses;
48
import org.eclipse.cdt.dsf.mi.service.MIProcesses;
48
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
49
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
49
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess;
50
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess;
50
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess.State;
51
import org.eclipse.cdt.dsf.mi.service.command.events.MIStoppedEvent;
51
import org.eclipse.cdt.dsf.mi.service.command.events.MIStoppedEvent;
52
import org.eclipse.cdt.dsf.mi.service.command.output.MIBreakInsertInfo;
52
import org.eclipse.cdt.dsf.mi.service.command.output.MIBreakInsertInfo;
53
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
53
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
Lines 370-376 Link Here
370
						@Override
370
						@Override
371
						protected void handleSuccess() {
371
						protected void handleSuccess() {
372
							if (getData() instanceof IMIContainerDMContext) {
372
							if (getData() instanceof IMIContainerDMContext) {
373
								if (fGdb.getInferiorProcess().getState() == State.RUNNING) {
373
								IMIRunControl runControl = getServicesTracker().getService(IMIRunControl.class);
374
								if (runControl != null && !runControl.isTargetAcceptingCommands()) {
374
									fBackend.interrupt();
375
									fBackend.interrupt();
375
								}
376
								}
376
377
(-)src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java (-2 / +3 lines)
Lines 58-68 Link Here
58
import org.eclipse.cdt.dsf.mi.service.IMIExecutionDMContext;
58
import org.eclipse.cdt.dsf.mi.service.IMIExecutionDMContext;
59
import org.eclipse.cdt.dsf.mi.service.IMIProcessDMContext;
59
import org.eclipse.cdt.dsf.mi.service.IMIProcessDMContext;
60
import org.eclipse.cdt.dsf.mi.service.IMIProcesses;
60
import org.eclipse.cdt.dsf.mi.service.IMIProcesses;
61
import org.eclipse.cdt.dsf.mi.service.IMIRunControl;
61
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsManager;
62
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsManager;
62
import org.eclipse.cdt.dsf.mi.service.MIProcesses;
63
import org.eclipse.cdt.dsf.mi.service.MIProcesses;
63
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
64
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
64
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess;
65
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess;
65
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess.State;
66
import org.eclipse.cdt.dsf.mi.service.command.events.MIThreadGroupCreatedEvent;
66
import org.eclipse.cdt.dsf.mi.service.command.events.MIThreadGroupCreatedEvent;
67
import org.eclipse.cdt.dsf.mi.service.command.events.MIThreadGroupExitedEvent;
67
import org.eclipse.cdt.dsf.mi.service.command.events.MIThreadGroupExitedEvent;
68
import org.eclipse.cdt.dsf.mi.service.command.output.MIConst;
68
import org.eclipse.cdt.dsf.mi.service.command.output.MIConst;
Lines 1134-1140 Link Here
1134
						@Override
1134
						@Override
1135
						protected void handleSuccess() {
1135
						protected void handleSuccess() {
1136
							if (getData() instanceof IMIContainerDMContext) {
1136
							if (getData() instanceof IMIContainerDMContext) {
1137
								if (fCommandControl.getInferiorProcess().getState() == State.RUNNING) {
1137
								IMIRunControl runControl = getServicesTracker().getService(IMIRunControl.class);
1138
								if (runControl != null && !runControl.isTargetAcceptingCommands()) {
1138
									fBackend.interrupt();
1139
									fBackend.interrupt();
1139
								}
1140
								}
1140
1141
(-)src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0_NS.java (+6 lines)
Lines 1481-1486 Link Here
1481
		return MIRunMode.NON_STOP;
1481
		return MIRunMode.NON_STOP;
1482
	}
1482
	}
1483
1483
1484
	/** @since 4.0 */
1485
	public boolean isTargetAcceptingCommands() {
1486
		// Always accepting commands in non-stop mode
1487
		return true;
1488
	}
1489
1484
	/**
1490
	/**
1485
	 * See bug 196154
1491
	 * See bug 196154
1486
	 * 
1492
	 * 
(-)src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java (-2 / +3 lines)
Lines 39-51 Link Here
39
import org.eclipse.cdt.dsf.mi.service.IMIBackend;
39
import org.eclipse.cdt.dsf.mi.service.IMIBackend;
40
import org.eclipse.cdt.dsf.mi.service.IMIBackend.BackendStateChangedEvent;
40
import org.eclipse.cdt.dsf.mi.service.IMIBackend.BackendStateChangedEvent;
41
import org.eclipse.cdt.dsf.mi.service.IMICommandControl;
41
import org.eclipse.cdt.dsf.mi.service.IMICommandControl;
42
import org.eclipse.cdt.dsf.mi.service.IMIRunControl;
42
import org.eclipse.cdt.dsf.mi.service.command.AbstractCLIProcess;
43
import org.eclipse.cdt.dsf.mi.service.command.AbstractCLIProcess;
43
import org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl;
44
import org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl;
44
import org.eclipse.cdt.dsf.mi.service.command.CLIEventProcessor;
45
import org.eclipse.cdt.dsf.mi.service.command.CLIEventProcessor;
45
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
46
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
46
import org.eclipse.cdt.dsf.mi.service.command.MIControlDMContext;
47
import org.eclipse.cdt.dsf.mi.service.command.MIControlDMContext;
47
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess;
48
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess;
48
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess.State;
49
import org.eclipse.cdt.dsf.mi.service.command.MIRunControlEventProcessor;
49
import org.eclipse.cdt.dsf.mi.service.command.MIRunControlEventProcessor;
50
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
50
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
51
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
51
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
Lines 179-185 Link Here
179
       // Interrupt GDB in case the inferior is running.
179
       // Interrupt GDB in case the inferior is running.
180
       // That way, the inferior will also be killed when we exit GDB.
180
       // That way, the inferior will also be killed when we exit GDB.
181
       //
181
       //
182
       if (fInferiorProcess.getState() == State.RUNNING) {
182
		IMIRunControl runControl = getServicesTracker().getService(IMIRunControl.class);
183
		if (runControl != null && !runControl.isTargetAcceptingCommands()) {
183
           fMIBackend.interrupt();
184
           fMIBackend.interrupt();
184
       }
185
       }
185
       
186
       
(-)src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java (-2 / +3 lines)
Lines 40-52 Link Here
40
import org.eclipse.cdt.dsf.mi.service.IMIBackend;
40
import org.eclipse.cdt.dsf.mi.service.IMIBackend;
41
import org.eclipse.cdt.dsf.mi.service.IMIBackend.BackendStateChangedEvent;
41
import org.eclipse.cdt.dsf.mi.service.IMIBackend.BackendStateChangedEvent;
42
import org.eclipse.cdt.dsf.mi.service.IMICommandControl;
42
import org.eclipse.cdt.dsf.mi.service.IMICommandControl;
43
import org.eclipse.cdt.dsf.mi.service.IMIRunControl;
43
import org.eclipse.cdt.dsf.mi.service.command.AbstractCLIProcess;
44
import org.eclipse.cdt.dsf.mi.service.command.AbstractCLIProcess;
44
import org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl;
45
import org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl;
45
import org.eclipse.cdt.dsf.mi.service.command.CLIEventProcessor_7_0;
46
import org.eclipse.cdt.dsf.mi.service.command.CLIEventProcessor_7_0;
46
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
47
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
47
import org.eclipse.cdt.dsf.mi.service.command.MIControlDMContext;
48
import org.eclipse.cdt.dsf.mi.service.command.MIControlDMContext;
48
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess;
49
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess;
49
import org.eclipse.cdt.dsf.mi.service.command.MIInferiorProcess.State;
50
import org.eclipse.cdt.dsf.mi.service.command.MIRunControlEventProcessor_7_0;
50
import org.eclipse.cdt.dsf.mi.service.command.MIRunControlEventProcessor_7_0;
51
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
51
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
52
import org.eclipse.cdt.dsf.mi.service.command.output.MIListFeaturesInfo;
52
import org.eclipse.cdt.dsf.mi.service.command.output.MIListFeaturesInfo;
Lines 183-189 Link Here
183
    	// Interrupt GDB in case the inferior is running.
183
    	// Interrupt GDB in case the inferior is running.
184
    	// That way, the inferior will also be killed when we exit GDB.
184
    	// That way, the inferior will also be killed when we exit GDB.
185
    	//
185
    	//
186
    	if (fInferiorProcess.getState() == State.RUNNING) {
186
		IMIRunControl runControl = getServicesTracker().getService(IMIRunControl.class);
187
		if (runControl != null && !runControl.isTargetAcceptingCommands()) {
187
    		fMIBackend.interrupt();
188
    		fMIBackend.interrupt();
188
    	}
189
    	}
189
190
(-)src/org/eclipse/cdt/dsf/mi/service/IMIRunControl.java (+7 lines)
Lines 24-29 Link Here
24
public interface IMIRunControl extends IRunControl2
24
public interface IMIRunControl extends IRunControl2
25
{
25
{
26
	/**
26
	/**
27
	 * Returns true if the target currently accepting commands.
28
	 *
29
	 * @since 4.0
30
	 */
31
	public boolean isTargetAcceptingCommands();
32
	
33
	/**
27
	 * Request that the specified steps be executed by first ensuring the target is available
34
	 * Request that the specified steps be executed by first ensuring the target is available
28
	 * to receive commands.  Once the specified steps are executed, the target should be
35
	 * to receive commands.  Once the specified steps are executed, the target should be
29
	 * returned to its original availability.
36
	 * returned to its original availability.
(-)src/org/eclipse/cdt/dsf/mi/service/MIRunControl.java (+10 lines)
Lines 1250-1253 Link Here
1250
	public IRunMode getRunMode() {
1250
	public IRunMode getRunMode() {
1251
		return MIRunMode.ALL_STOP;
1251
		return MIRunMode.ALL_STOP;
1252
	}
1252
	}
1253
	
1254
	/** @since 4.0 */
1255
	public boolean isTargetAcceptingCommands() {
1256
		// For all-stop mode:
1257
		// 1- if GDB is not terminated and
1258
		// 2- if execution is suspended and 
1259
		// 3- if we didn't just send a resume/stop command, then 
1260
		// we know GDB is accepting commands
1261
		return !fTerminated && fSuspended && !fResumePending;
1262
	}
1253
}
1263
}

Return to bug 339047