From a14e7db1a4e9d1173ed9e8cc85585b147ddbaae9 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 26 Apr 2016 14:59:23 +0200 Subject: [PATCH] Fix valgrind with remote Linux hosts. This reverts commit f1ccad12dc and adds the necessary code to make both the local and the remote case work. Task-number: QTCREATORBUG-16153 Change-Id: I233ec9d7b31ca6e076515dd03ae7400758ee0c34 Reviewed-by: hjk --- .../valgrind/memcheck/memcheckrunner.cpp | 21 ++++++++++++------- .../valgrind/memcheck/memcheckrunner.h | 4 +++- src/plugins/valgrind/valgrindprocess.cpp | 2 ++ src/plugins/valgrind/valgrindprocess.h | 1 + src/plugins/valgrind/valgrindrunner.cpp | 7 +++++++ src/plugins/valgrind/valgrindrunner.h | 1 + 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/plugins/valgrind/memcheck/memcheckrunner.cpp b/src/plugins/valgrind/memcheck/memcheckrunner.cpp index 61d1cd56902..cf0e793bb55 100644 --- a/src/plugins/valgrind/memcheck/memcheckrunner.cpp +++ b/src/plugins/valgrind/memcheck/memcheckrunner.cpp @@ -95,10 +95,11 @@ bool MemcheckRunner::start() { QTC_ASSERT(d->parser, return false); - if (!startServers()) - return false; - - setValgrindArguments(memcheckLogArguments() + valgrindArguments()); + if (device()->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) { + if (!startServers(QHostAddress::LocalHost)) + return false; + setValgrindArguments(memcheckLogArguments() + valgrindArguments()); + } return ValgrindRunner::start(); } @@ -133,10 +134,8 @@ void MemcheckRunner::readLogSocket() emit logMessageReceived(d->logSocket->readAll()); } -bool MemcheckRunner::startServers() +bool MemcheckRunner::startServers(const QHostAddress &localHostAddress) { - QHostAddress localHostAddress(QHostAddress::LocalHost); - bool check = d->xmlServer.listen(localHostAddress); const QString ip = localHostAddress.toString(); if (!check) { @@ -172,5 +171,13 @@ QStringList MemcheckRunner::memcheckLogArguments() const return arguments; } +void MemcheckRunner::localHostAddressRetrieved(const QHostAddress &localHostAddress) +{ + if (startServers(localHostAddress)) { + setValgrindArguments(memcheckLogArguments() + valgrindArguments()); + valgrindProcess()->setValgrindArguments(fullValgrindArguments()); + } +} + } // namespace Memcheck } // namespace Valgrind diff --git a/src/plugins/valgrind/memcheck/memcheckrunner.h b/src/plugins/valgrind/memcheck/memcheckrunner.h index 7bdef65d3e7..ca47ec87843 100644 --- a/src/plugins/valgrind/memcheck/memcheckrunner.h +++ b/src/plugins/valgrind/memcheck/memcheckrunner.h @@ -53,6 +53,8 @@ signals: void logMessageReceived(const QByteArray &); private slots: + void localHostAddressRetrieved(const QHostAddress &localHostAddress); + void xmlSocketConnected(); void logSocketConnected(); void readLogSocket(); @@ -60,7 +62,7 @@ private slots: private: QString tool() const; - bool startServers(); + bool startServers(const QHostAddress &localHostAddress); QStringList memcheckLogArguments() const; class Private; diff --git a/src/plugins/valgrind/valgrindprocess.cpp b/src/plugins/valgrind/valgrindprocess.cpp index 83184c5269e..b4894f5066f 100644 --- a/src/plugins/valgrind/valgrindprocess.cpp +++ b/src/plugins/valgrind/valgrindprocess.cpp @@ -205,6 +205,8 @@ void ValgrindProcess::connected() { QTC_ASSERT(m_remote.m_connection->state() == QSsh::SshConnection::Connected, return); + emit localHostAddressRetrieved(m_remote.m_connection->connectionInfo().localAddress); + // connected, run command QString cmd; diff --git a/src/plugins/valgrind/valgrindprocess.h b/src/plugins/valgrind/valgrindprocess.h index 0d04a4093e2..ba939e939da 100644 --- a/src/plugins/valgrind/valgrindprocess.h +++ b/src/plugins/valgrind/valgrindprocess.h @@ -75,6 +75,7 @@ signals: void finished(int, QProcess::ExitStatus); void error(QProcess::ProcessError); void processOutput(const QString &, Utils::OutputFormat format); + void localHostAddressRetrieved(const QHostAddress &localHostAddress); private: void handleRemoteStderr(); diff --git a/src/plugins/valgrind/valgrindrunner.cpp b/src/plugins/valgrind/valgrindrunner.cpp index 477cf3478b0..1fbaab039a7 100644 --- a/src/plugins/valgrind/valgrindrunner.cpp +++ b/src/plugins/valgrind/valgrindrunner.cpp @@ -147,6 +147,8 @@ bool ValgrindRunner::start() this, &ValgrindRunner::processFinished); QObject::connect(d->process, &ValgrindProcess::error, this, &ValgrindRunner::processError); + QObject::connect(d->process, &ValgrindProcess::localHostAddressRetrieved, + this, &ValgrindRunner::localHostAddressRetrieved); d->process->run(d->debuggee.runMode); return true; @@ -178,6 +180,11 @@ void ValgrindRunner::processFinished(int ret, QProcess::ExitStatus status) emit processErrorReceived(errorString(), d->process->processError()); } +void ValgrindRunner::localHostAddressRetrieved(const QHostAddress &localHostAddress) +{ + Q_UNUSED(localHostAddress); +} + QString ValgrindRunner::errorString() const { if (d->process) diff --git a/src/plugins/valgrind/valgrindrunner.h b/src/plugins/valgrind/valgrindrunner.h index 637f436ad09..13b0ffe2fd6 100644 --- a/src/plugins/valgrind/valgrindrunner.h +++ b/src/plugins/valgrind/valgrindrunner.h @@ -80,6 +80,7 @@ signals: protected slots: virtual void processError(QProcess::ProcessError); virtual void processFinished(int, QProcess::ExitStatus); + virtual void localHostAddressRetrieved(const QHostAddress &localHostAddress); private: class Private;