diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h index 04c0b1d1178..596b84e4379 100644 --- a/src/plugins/coreplugin/coreplugin.h +++ b/src/plugins/coreplugin/coreplugin.h @@ -87,7 +87,7 @@ private: MainWindow *m_mainWindow = nullptr; EditMode *m_editMode = nullptr; Locator *m_locator = nullptr; - ReaperPrivate m_reaper; + ProcessReapers m_reaper; }; } // namespace Internal diff --git a/src/plugins/coreplugin/reaper.cpp b/src/plugins/coreplugin/reaper.cpp index ff89b7d5e10..1039814485a 100644 --- a/src/plugins/coreplugin/reaper.cpp +++ b/src/plugins/coreplugin/reaper.cpp @@ -26,19 +26,20 @@ #include "reaper.h" #include "reaper_p.h" -#include #include #include +#include +#include #include +#include namespace Core { namespace Internal { -static ReaperPrivate *d = nullptr; +static ProcessReapers *d = nullptr; -namespace { -void killProcess(QProcess *process) +static void killProcess(QProcess *process) { if (auto qtcProcess = qobject_cast(process)) qtcProcess->kill(); @@ -46,14 +47,30 @@ void killProcess(QProcess *process) process->kill(); } -void terminateProcess(QProcess *process) +static void terminateProcess(QProcess *process) { if (auto qtcProcess = qobject_cast(process)) qtcProcess->terminate(); else process->terminate(); } -} // namespace + +class ProcessReaper final : public QObject +{ +public: + ProcessReaper(QProcess *p, int timeoutMs); + ~ProcessReaper() final; + + int timeoutMs() const; + bool isFinished() const; + void nextIteration(); + +private: + mutable QTimer m_iterationTimer; + QProcess *m_process; + int m_emergencyCounter = 0; + QProcess::ProcessState m_lastState = QProcess::NotRunning; +}; ProcessReaper::ProcessReaper(QProcess *p, int timeoutMs) : m_process(p) { @@ -64,7 +81,6 @@ ProcessReaper::ProcessReaper(QProcess *p, int timeoutMs) : m_process(p) connect(&m_iterationTimer, &QTimer::timeout, this, &ProcessReaper::nextIteration); QTimer::singleShot(0, this, &ProcessReaper::nextIteration); - m_futureInterface.reportStarted(); } ProcessReaper::~ProcessReaper() @@ -92,7 +108,6 @@ void ProcessReaper::nextIteration() if (state == QProcess::NotRunning || m_emergencyCounter > 5) { delete m_process; m_process = nullptr; - m_futureInterface.reportFinished(); return; } @@ -112,12 +127,12 @@ void ProcessReaper::nextIteration() ++m_emergencyCounter; } -ReaperPrivate::ReaperPrivate() +ProcessReapers::ProcessReapers() { d = this; } -ReaperPrivate::~ReaperPrivate() +ProcessReapers::~ProcessReapers() { while (!m_reapers.isEmpty()) { int alreadyWaited = 0; diff --git a/src/plugins/coreplugin/reaper_p.h b/src/plugins/coreplugin/reaper_p.h index f4f10071341..78140c0eba6 100644 --- a/src/plugins/coreplugin/reaper_p.h +++ b/src/plugins/coreplugin/reaper_p.h @@ -25,46 +25,24 @@ #pragma once -#include -#include -#include -#include +#include namespace Core { namespace Internal { class CorePlugin; +class ProcessReaper; -class ProcessReaper : public QObject +class ProcessReapers final { - Q_OBJECT - -public: - ProcessReaper(QProcess *p, int timeoutMs); - ~ProcessReaper() override; - - int timeoutMs() const; - bool isFinished() const; - void nextIteration(); - private: - mutable QTimer m_iterationTimer; - QFutureInterface m_futureInterface; - QProcess *m_process; - int m_emergencyCounter = 0; - QProcess::ProcessState m_lastState = QProcess::NotRunning; -}; - -class ReaperPrivate { -public: - ~ReaperPrivate(); + ~ProcessReapers(); + ProcessReapers(); QList m_reapers; -private: - ReaperPrivate(); - friend class CorePlugin; + friend class ProcessReaper; }; } // namespace Internal diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 296866078b2..6888218ded9 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -59,16 +59,17 @@ #endif #include -#include -#include +#include +#include #include +#include +#include +#include +#include #include #include -#include -#include -#include -#include -#include +#include +#include using namespace Core; using namespace ProjectExplorer;