forked from qt-creator/qt-creator
always clear pending command queue before posting shutdown commands
this ensures that, among other things, we won't get into this scenario: - process is running - interrupt is requested by user - termination is requested by user - before interrupt takes effect, the process terminates => shutdown is called => exit is also queued, as there is already a queued kill => nothing happens, as there will never be a stop response Reviewed-by: hjk
This commit is contained in:
@@ -1406,7 +1406,6 @@ void GdbEngine::handleExecContinue(const GdbResponse &response)
|
||||
} else {
|
||||
if (state() == InferiorRunningRequested_Kill) {
|
||||
setState(InferiorStopped);
|
||||
m_commandsToRunOnTemporaryBreak.clear();
|
||||
shutdown();
|
||||
return;
|
||||
}
|
||||
@@ -1423,7 +1422,6 @@ void GdbEngine::handleExecContinue(const GdbResponse &response)
|
||||
} else {
|
||||
showMessageBox(QMessageBox::Critical, tr("Execution Error"),
|
||||
tr("Cannot continue debugged process:\n") + QString::fromLocal8Bit(msg));
|
||||
m_commandsToRunOnTemporaryBreak.clear();
|
||||
shutdown();
|
||||
}
|
||||
}
|
||||
@@ -1468,6 +1466,7 @@ void GdbEngine::shutdown()
|
||||
// fall-through
|
||||
case AdapterStartFailed: // Adapter "did something", but it did not help
|
||||
if (m_gdbProc.state() == QProcess::Running) {
|
||||
m_commandsToRunOnTemporaryBreak.clear();
|
||||
postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleGdbExit));
|
||||
} else {
|
||||
setState(DebuggerNotReady);
|
||||
@@ -1486,6 +1485,7 @@ void GdbEngine::shutdown()
|
||||
case InferiorShutDown:
|
||||
case InferiorShutdownFailed: // Whatever
|
||||
case InferiorUnrunnable:
|
||||
m_commandsToRunOnTemporaryBreak.clear();
|
||||
postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleGdbExit));
|
||||
setState(EngineShuttingDown); // Do it after posting the command!
|
||||
break;
|
||||
|
Reference in New Issue
Block a user