From 087733e5d5db67ec9b83ba9b16e820b6e53d1807 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Fri, 23 Oct 2009 21:32:08 +0200
Subject: [PATCH] avoid copy of GdbResponse struct

---
 src/plugins/debugger/gdb/gdbengine.cpp | 29 +++++++++++++-------------
 src/plugins/debugger/gdb/gdbengine.h   |  2 +-
 2 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index cb9e822184c..79ae8fafdcd 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -568,7 +568,7 @@ void GdbEngine::handleResponse(const QByteArray &buff)
             m_pendingLogStreamOutput.clear();
             m_pendingConsoleStreamOutput.clear();
 
-            handleResultRecord(response);
+            handleResultRecord(&response);
             break;
         }
         default: {
@@ -733,13 +733,13 @@ void GdbEngine::flushCommand(const GdbCommand &cmd0)
     m_gdbAdapter->write(cmd.command.toLatin1() + "\r\n");
 }
 
-void GdbEngine::handleResultRecord(const GdbResponse &response)
+void GdbEngine::handleResultRecord(GdbResponse *response)
 {
     //qDebug() << "TOKEN:" << response.token
     //    << " ACCEPTABLE:" << m_oldestAcceptableToken;
     //qDebug() << "\nRESULT" << response.token << response.toString();
 
-    int token = response.token;
+    int token = response->token;
     if (token == -1)
         return;
 
@@ -750,8 +750,8 @@ void GdbEngine::handleResultRecord(const GdbResponse &response)
         // Ideally, this code should not be present at all.
         debugMessage(_("COOKIE FOR TOKEN %1 ALREADY EATEN. "
             "TWO RESPONSES FOR ONE COMMAND?").arg(token));
-        if (response.resultClass == GdbResultError) {
-            QByteArray msg = response.data.findChild("msg").data();
+        if (response->resultClass == GdbResultError) {
+            QByteArray msg = response->data.findChild("msg").data();
             if (msg == "Cannot find new threads: generic error") {
                 // Handle a case known to occur on Linux/gdb 6.8 when debugging moc
                 // with helpers enabled. In this case we get a second response with
@@ -788,26 +788,25 @@ void GdbEngine::handleResultRecord(const GdbResponse &response)
             .arg(cmd.postTime.msecsTo(QTime::currentTime()) / 1000.));
     }
 
-    if (response.token < m_oldestAcceptableToken && (cmd.flags & Discardable)) {
+    if (response->token < m_oldestAcceptableToken && (cmd.flags & Discardable)) {
         //debugMessage(_("### SKIPPING OLD RESULT") + response.toString());
         return;
     }
 
-    GdbResponse responseWithCookie = response;
-    responseWithCookie.cookie = cmd.cookie;
+    response->cookie = cmd.cookie;
 
-    if (response.resultClass != GdbResultError &&
-        response.resultClass != ((cmd.flags & RunRequest) ? GdbResultRunning :
-                                 (cmd.flags & ExitRequest) ? GdbResultExit :
-                                 GdbResultDone)) {
-        QString rsp = _(GdbResponse::stringFromResultClass(response.resultClass));
+    if (response->resultClass != GdbResultError &&
+        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);
+            (this->*cmd.callback)(*response);
         else if (cmd.adapterCallback)
-            (m_gdbAdapter->*cmd.adapterCallback)(responseWithCookie);
+            (m_gdbAdapter->*cmd.adapterCallback)(*response);
     }
 
     if (cmd.flags & RebuildModel) {
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index 6e6db609c48..d26db4da69b 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -246,7 +246,7 @@ private: ////////// Gdb Output, State & Capability Handling //////////
 
     void handleResponse(const QByteArray &buff);
     void handleStopResponse(const GdbMi &data);
-    void handleResultRecord(const GdbResponse &response);
+    void handleResultRecord(GdbResponse *response);
     void handleStop1(const GdbResponse &response);
     void handleStop1(const GdbMi &data);
     void handleStop2(const GdbResponse &response);
-- 
GitLab