From f99e2570fb0df4537e25ddfe1cb0d91f69c0e20c Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Mon, 19 Jan 2015 10:44:30 +0200 Subject: [PATCH] Support multiple instances listening for debug output... ... only not simultaneously Task-number: QTCREATORBUG-3443 Change-Id: Ie88ee305a1ad134d81a19cece42f7fd81fc08f16 Reviewed-by: Friedemann Kleint --- src/plugins/projectexplorer/appoutputpane.cpp | 6 ++++++ src/plugins/projectexplorer/windebuginterface.cpp | 13 +++++++++---- src/plugins/projectexplorer/windebuginterface.h | 2 ++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index 14436cbc272..d44ba304cf5 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -33,6 +33,7 @@ #include "projectexplorersettings.h" #include "runconfiguration.h" #include "session.h" +#include "windebuginterface.h" #include #include @@ -203,6 +204,11 @@ AppOutputPane::AppOutputPane() : this, SLOT(aboutToUnloadSession())); connect(ProjectExplorerPlugin::instance(), SIGNAL(settingsChanged()), this, SLOT(updateFromSettings())); + +#ifdef Q_OS_WIN + connect(this, &AppOutputPane::allRunControlsFinished, + WinDebugInterface::instance(), &WinDebugInterface::stop); +#endif } AppOutputPane::~AppOutputPane() diff --git a/src/plugins/projectexplorer/windebuginterface.cpp b/src/plugins/projectexplorer/windebuginterface.cpp index 60a616dc520..293b533f7e6 100644 --- a/src/plugins/projectexplorer/windebuginterface.cpp +++ b/src/plugins/projectexplorer/windebuginterface.cpp @@ -56,20 +56,25 @@ WinDebugInterface *WinDebugInterface::instance() return m_instance; } +bool WinDebugInterface::stop() +{ + if (!m_waitHandles[TerminateEventHandle]) + return false; + SetEvent(m_waitHandles[TerminateEventHandle]); + return true; +} + WinDebugInterface::WinDebugInterface(QObject *parent) : QThread(parent) { m_instance = this; setObjectName(QLatin1String("WinDebugInterfaceThread")); - start(); } WinDebugInterface::~WinDebugInterface() { - if (m_waitHandles[TerminateEventHandle]) { - SetEvent(m_waitHandles[TerminateEventHandle]); + if (stop()) wait(500); - } m_instance = 0; } diff --git a/src/plugins/projectexplorer/windebuginterface.h b/src/plugins/projectexplorer/windebuginterface.h index 4ee7474ee8d..58a62e0aef3 100644 --- a/src/plugins/projectexplorer/windebuginterface.h +++ b/src/plugins/projectexplorer/windebuginterface.h @@ -46,6 +46,8 @@ public: static WinDebugInterface *instance(); + bool stop(); + signals: void debugOutput(qint64 pid, const QString &message); void cannotRetrieveDebugOutput();