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();