From 70f696d05610d7b49f37971d3f1ed38dee9f2222 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Tue, 13 Oct 2009 17:13:19 +0200
Subject: [PATCH] -gdb-exit has a special return code as well

---
 src/plugins/debugger/gdb/attachgdbadapter.cpp |  2 +-
 src/plugins/debugger/gdb/coregdbadapter.cpp   |  2 +-
 src/plugins/debugger/gdb/gdbengine.cpp        | 10 ++++++----
 src/plugins/debugger/gdb/gdbengine.h          |  3 ++-
 src/plugins/debugger/gdb/plaingdbadapter.cpp  |  4 ++--
 src/plugins/debugger/gdb/remotegdbadapter.cpp |  2 +-
 src/plugins/debugger/gdb/trkgdbadapter.cpp    |  2 +-
 7 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/plugins/debugger/gdb/attachgdbadapter.cpp b/src/plugins/debugger/gdb/attachgdbadapter.cpp
index 484828d2a1a..e6325deb61d 100644
--- a/src/plugins/debugger/gdb/attachgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/attachgdbadapter.cpp
@@ -130,7 +130,7 @@ void AttachGdbAdapter::shutdown()
 
     case InferiorShutDown:
         setState(AdapterShuttingDown);
-        m_engine->postCommand(_("-gdb-exit"), CB(handleExit));
+        m_engine->postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleExit));
         return;
 
     default:
diff --git a/src/plugins/debugger/gdb/coregdbadapter.cpp b/src/plugins/debugger/gdb/coregdbadapter.cpp
index 979d049cc0d..b0ddd2d7b52 100644
--- a/src/plugins/debugger/gdb/coregdbadapter.cpp
+++ b/src/plugins/debugger/gdb/coregdbadapter.cpp
@@ -192,7 +192,7 @@ void CoreGdbAdapter::shutdown()
     case InferiorUnrunnable:
     case InferiorShutDown:
         setState(AdapterShuttingDown);
-        m_engine->postCommand(_("-gdb-exit"), CB(handleExit));
+        m_engine->postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleExit));
         return;
 
     default:
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 1372c470058..f4d2576e85d 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -803,10 +803,12 @@ void GdbEngine::handleResultRecord(const GdbResponse &response)
     responseWithCookie.cookie = cmd.cookie;
 
     if (response.resultClass != GdbResultError &&
-        response.resultClass != ((cmd.flags & RunRequest) ? GdbResultRunning : GdbResultDone)) {
-        debugMessage(_("UNEXPECTED RESPONSE %1 TO COMMAND %2")
-                     .arg(_(GdbResponse::stringFromResultClass(response.resultClass)))
-                     .arg(cmd.command));
+        response.resultClass != ((cmd.flags & RunRequest) ? GdbResultRunning :
+                                 (cmd.flags & ExitRequest) ? GdbResultExit :
+                                 GdbResultDone)) {
+        QString rsp = _(GdbResponse::stringFromResultClass(response.resultClass));
+        qWarning() << "UNEXPECTED RESPONSE " << rsp << " TO COMMAND" << cmd.command << " AT " __FILE__ ":" STRINGIFY(__LINE__);
+        debugMessage(_("UNEXPECTED RESPONSE %1 TO COMMAND %2").arg(rsp).arg(cmd.command));
     } else {
         if (cmd.callback)
             (this->*cmd.callback)(responseWithCookie);
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index dada8205da7..a3e063e3166 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -177,7 +177,8 @@ public: // otherwise the Qt flag macros are unhappy
         RebuildModel = 4, // Trigger model rebuild when no such commands are pending any more
         WatchUpdate = Discardable | RebuildModel,
         EmbedToken = 8,   // Expand %1 in the command to the command token
-        RunRequest = 16   // Callback expect GdbResultRunning instead of GdbResultDone
+        RunRequest = 16,  // Callback expect GdbResultRunning instead of GdbResultDone
+        ExitRequest = 32  // Callback expect GdbResultExit instead of GdbResultDone
     };
     Q_DECLARE_FLAGS(GdbCommandFlags, GdbCommandFlag)
 
diff --git a/src/plugins/debugger/gdb/plaingdbadapter.cpp b/src/plugins/debugger/gdb/plaingdbadapter.cpp
index 5d21af78816..b1395f6439c 100644
--- a/src/plugins/debugger/gdb/plaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/plaingdbadapter.cpp
@@ -177,7 +177,7 @@ void PlainGdbAdapter::shutdown()
 
     case InferiorShutDown:
         setState(AdapterShuttingDown);
-        m_engine->postCommand(_("-gdb-exit"), CB(handleExit));
+        m_engine->postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleExit));
         return;
 
 /*
@@ -192,7 +192,7 @@ void PlainGdbAdapter::shutdown()
                 .arg(state()));
             m_gdbProc.kill();
         }
-        m_engine->postCommand(_("-gdb-exit"), CB(handleExit));
+        m_engine->postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleExit));
         return;
 */
     default:
diff --git a/src/plugins/debugger/gdb/remotegdbadapter.cpp b/src/plugins/debugger/gdb/remotegdbadapter.cpp
index 27b0031cbf7..d6fdb3381a6 100644
--- a/src/plugins/debugger/gdb/remotegdbadapter.cpp
+++ b/src/plugins/debugger/gdb/remotegdbadapter.cpp
@@ -248,7 +248,7 @@ void RemoteGdbAdapter::shutdown()
     case InferiorStartFailed:
     case InferiorShutDown:
         setState(AdapterShuttingDown);
-        m_engine->postCommand(_("-gdb-exit"), CB(handleExit));
+        m_engine->postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleExit));
         return;
 
     }
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 3a7c37d6548..bd32a388104 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -2015,7 +2015,7 @@ void TrkGdbAdapter::shutdown()
     case InferiorShutDown:
         setState(AdapterShuttingDown);
         cleanup();
-        m_engine->postCommand(_("-gdb-exit"), CB(handleExit));
+        m_engine->postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleExit));
         return;
 
 /*
-- 
GitLab