From fb82c78086ac31a75dbd1e82113bc138916210fe Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Mon, 11 Oct 2010 16:37:19 +0200
Subject: [PATCH] Debugger: Fix CDB shutdown warnings.

Protect endInferior() from repeated invocation.

Reviewed-by: hjk
Task-number: QTCREATORBUG-2681
---
 src/plugins/debugger/cdb/cdbengine.cpp | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 520bc5110fb..b96c958d132 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -563,8 +563,12 @@ void CdbEngine::processTerminated(unsigned long exitCode)
 
 bool CdbEnginePrivate::endInferior(bool detachOnly, QString *errorMessage)
 {
+    // Prevent repeated invocation.
+    const bool hasHandles = m_hDebuggeeProcess != NULL;
     if (debugCDBExecution)
-        qDebug("endInferior detach=%d, %s", detachOnly, DebuggerEngine::stateName(m_engine->state()));
+        qDebug("endInferior detach=%d, %s handles=%d", detachOnly, DebuggerEngine::stateName(m_engine->state()), hasHandles);
+    if (!hasHandles)
+        return true;
     // Are we running
     switch (m_engine->state()) {
     case InferiorRunRequested:
@@ -1089,8 +1093,13 @@ void CdbEngine::activateFrame(int frameIndex)
     if (debugCDB)
         qDebug() << Q_FUNC_INFO << frameIndex;
 
-    if (state() != InferiorStopOk) {
-        qWarning("WARNING %s: invoked while debuggee is running\n", Q_FUNC_INFO);
+    switch (state()) {
+    case InferiorStopOk:
+    case InferiorShutdownRequested:
+        break;
+    default:
+        qWarning("WARNING %s: invoked in invalid state %s\n",
+                 Q_FUNC_INFO, DebuggerEngine::stateName(state()));
         return;
     }
 
-- 
GitLab