From ad6451bbe430ae1776744bd50d8c74cc00b470f4 Mon Sep 17 00:00:00 2001 From: hjk <hjk@theqtcompany.com> Date: Tue, 16 Jun 2015 15:01:46 +0200 Subject: [PATCH] Debugger: Remove the InferiorExited state There are now several possible orders of events between sending a 'kill' and receiving something that indicated a properly shut down inferior. Coordinating the InferiorExited state during engine ramp down is not worthwhile as that state had only a forced transition to InferiorShutdownOk anyway. For the user (and user code), only the fact that ramp down is finished is interesting. Change-Id: Ic22131d5a1066dc62bd069f532c28b773f231088 Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com> --- src/plugins/debugger/debuggerconstants.h | 2 -- src/plugins/debugger/debuggerengine.cpp | 13 +++---------- src/plugins/debugger/debuggerplugin.cpp | 2 +- src/plugins/debugger/gdb/gdbengine.cpp | 8 +++++--- src/plugins/debugger/qml/qmlcppengine.cpp | 6 ------ 5 files changed, 9 insertions(+), 22 deletions(-) diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index f0f69da3bd7..cae3641433e 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -102,8 +102,6 @@ enum DebuggerState InferiorStopOk, // Debuggee stopped InferiorStopFailed, // Debuggee not stopped, will kill debugger - InferiorExitOk, - InferiorShutdownRequested, InferiorShutdownFailed, InferiorShutdownOk, diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 9b75b834acd..f3fd3bfa84c 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -382,7 +382,6 @@ const char *DebuggerEngine::stateName(int s) SN(InferiorStopRequested) SN(InferiorStopOk) SN(InferiorStopFailed) - SN(InferiorExitOk) SN(InferiorShutdownRequested) SN(InferiorShutdownOk) SN(InferiorShutdownFailed) @@ -720,20 +719,17 @@ static bool isAllowedTransition(DebuggerState from, DebuggerState to) return to == InferiorStopOk; case InferiorRunOk: return to == InferiorStopRequested - || to == InferiorStopOk // A spontaneous stop. - || to == InferiorExitOk; + || to == InferiorStopOk // A spontaneous stop. + || to == InferiorShutdownOk; // A spontaneous exit. case InferiorStopRequested: return to == InferiorStopOk || to == InferiorStopFailed; case InferiorStopOk: return to == InferiorRunRequested || to == InferiorShutdownRequested - || to == InferiorStopOk || to == InferiorExitOk; + || to == InferiorStopOk || to == InferiorShutdownOk; case InferiorStopFailed: return to == EngineShutdownRequested; - case InferiorExitOk: - return to == InferiorShutdownOk; - case InferiorUnrunnable: return to == InferiorShutdownRequested; case InferiorShutdownRequested: @@ -1201,7 +1197,6 @@ void DebuggerEngine::notifyInferiorExited() #endif showMessage(_("NOTE: INFERIOR EXITED")); d->resetLocation(); - setState(InferiorExitOk); setState(InferiorShutdownOk); if (isMasterEngine()) d->queueShutdownEngine(); @@ -1364,7 +1359,6 @@ bool DebuggerEngine::debuggerActionsEnabled(DebuggerState state) case EngineRunFailed: case InferiorSetupFailed: case InferiorStopFailed: - case InferiorExitOk: case InferiorShutdownRequested: case InferiorShutdownOk: case InferiorShutdownFailed: @@ -1428,7 +1422,6 @@ void DebuggerEngine::quitDebugger() break; case EngineRunFailed: case DebuggerFinished: - case InferiorExitOk: case InferiorShutdownOk: break; case InferiorSetupRequested: diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index df1271e963d..8346359cfc1 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -275,7 +275,7 @@ {notifyInferior- + + + Exited} + + + + + + + - InferiorExitOk + + + + + + + + + + + + InferiorShutdownOk InferiorShutdownFailed + * * + diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 702ecdc7e70..a2380d3bc65 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -135,7 +135,6 @@ static bool stateAcceptsGdbCommands(DebuggerState state) case InferiorStopFailed: case InferiorSetupOk: case EngineRunFailed: - case InferiorExitOk: case InferiorRunFailed: case EngineShutdownOk: case EngineShutdownFailed: @@ -1876,11 +1875,14 @@ void GdbEngine::shutdownInferior() void GdbEngine::handleInferiorShutdown(const DebuggerResponse &response) { - CHECK_STATE(InferiorShutdownRequested); if (response.resultClass == ResultDone) { - notifyInferiorShutdownOk(); + // We'll get async thread-group-exited responses to which we react. + // Nothing to do here. + // notifyInferiorShutdownOk(); return; } + // "kill" got stuck, or similar. + CHECK_STATE(InferiorShutdownRequested); QByteArray ba = response.data["msg"].data(); if (ba.contains(": No such file or directory.")) { // This happens when someone removed the binary behind our back. diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp index baef8df87c6..69d905acf4d 100644 --- a/src/plugins/debugger/qml/qmlcppengine.cpp +++ b/src/plugins/debugger/qml/qmlcppengine.cpp @@ -649,12 +649,6 @@ void QmlCppEngine::slaveEngineStateChanged notifyInferiorStopFailed(); break; } - case InferiorExitOk: { - // InferiorExitOk will be called through notifyInferiorExited - // when InferiorShutDownOk is reached - qmlEngine()->quitDebugger(); - break; - } case InferiorShutdownRequested: { if (state() == InferiorStopOk) { setState(InferiorShutdownRequested); -- GitLab