diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp index 9b8bde92e9c7d37b1d3ba2182de7e6936c7f096f..857d029cecfa3882d7fa300189db92b1e6edbb8b 100644 --- a/src/plugins/debugger/qml/qmlcppengine.cpp +++ b/src/plugins/debugger/qml/qmlcppengine.cpp @@ -83,10 +83,8 @@ QmlCppEngine::QmlCppEngine(const DebuggerStartParameters &sp) QmlCppEngine::~QmlCppEngine() { - if (d->m_qmlEngine) - delete d->m_qmlEngine; - if (d->m_cppEngine) - delete d->m_cppEngine; + delete d->m_qmlEngine; + delete d->m_cppEngine; } void QmlCppEngine::editorChanged(Core::IEditor *editor) @@ -483,7 +481,7 @@ void QmlCppEngine::shutdownInferior() { if (!checkErrorState(InferiorShutdownFailed)) { if (d->m_cppEngine->state() == InferiorStopOk) { - d->m_cppEngine->shutdownInferior(); + d->m_cppEngine->quitDebugger(); } else { notifyInferiorShutdownOk(); } @@ -499,13 +497,19 @@ void QmlCppEngine::initEngineShutdown() d->m_cppEngine->quitDebugger(); } else if (state() == EngineSetupRequested) { - if (!checkErrorState(EngineSetupFailed)) { + if (!runControl() || d->m_errorState == EngineSetupFailed) { + notifyEngineSetupFailed(); + } else { notifyEngineSetupOk(); } } else if (state() == InferiorStopRequested) { checkErrorState(InferiorStopFailed); - } else { + } else + if (state() == InferiorShutdownRequested && !checkErrorState(InferiorShutdownFailed)) { + notifyInferiorShutdownOk(); + } else + if (state() != DebuggerFinished) { quitDebugger(); } } @@ -518,11 +522,6 @@ void QmlCppEngine::shutdownEngine() } } -void QmlCppEngine::setupSlaveEngineOnTimer() -{ - QTimer::singleShot(0, this, SLOT(setupSlaveEngine())); -} - void QmlCppEngine::setupSlaveEngine() { if (d->m_qmlEngine->state() == DebuggerNotReady) @@ -620,6 +619,13 @@ void QmlCppEngine::engineStateChanged(const DebuggerState &newState) } break; + case EngineShutdownRequested: + // we have to abort the setup before the sub-engines die + // because we depend on an active runcontrol that will be shut down by the dying engine + if (state() == EngineSetupRequested) + notifyEngineSetupFailed(); + break; + case DebuggerFinished: initEngineShutdown(); break; diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h index 70a54888be063d55b1e71a8dbd9e65548d52013e..947e464d47bef8d873351704d1de6aab9eda101f 100644 --- a/src/plugins/debugger/qml/qmlcppengine.h +++ b/src/plugins/debugger/qml/qmlcppengine.h @@ -107,7 +107,6 @@ private slots: void editorChanged(Core::IEditor *editor); private: - void setupSlaveEngineOnTimer(); void initEngineShutdown(); bool checkErrorState(const DebuggerState stateToCheck); void engineStateChanged(const DebuggerState &newState);