diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 76a9d75236c9934942876112b9d456ae9b2d37bd..a13667bdb64bb20af48ad787b414c0b2580c046c 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -1182,7 +1182,7 @@ void DebuggerEngine::notifyEngineSetupFailed()
     setState(EngineSetupFailed);
     QTC_ASSERT(d->m_runControl, return);
     d->m_runControl->startFailed();
-    d->queueShutdownEngine();
+    setState(DebuggerFinished);
 }
 
 void DebuggerEngine::notifyEngineSetupOk()
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index ea90ff9f155df533787b803373b413ad38df41b9..820ad4e3917c6ffe6915306a162c4d05605a8458 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -172,6 +172,13 @@
 // Transitions marked by '*' are done asynchronously.
 // The GdbEngine->setupEngine() function is described in more detail below.
 //
+// The engines are responsible for local roll-back to the last
+// acknowledged state before calling notify*Failed. I.e. before calling
+// notifyEngineSetupFailed() any process started during setupEngine()
+// so far must be terminated.
+//
+//
+//
 //                        DebuggerNotReady
 //                               +
 //                      EngineSetupRequested