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