OSDN Git Service

Debugger: Fix CDB shutdown warnings.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 11 Oct 2010 14:37:19 +0000 (16:37 +0200)
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 11 Oct 2010 14:37:19 +0000 (16:37 +0200)
Protect endInferior() from repeated invocation.

Reviewed-by: hjk
Task-number: QTCREATORBUG-2681

src/plugins/debugger/cdb/cdbengine.cpp

index 520bc51..b96c958 100644 (file)
@@ -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;
     }