diff --git a/src/plugins/coreplugin/reaper.cpp b/src/plugins/coreplugin/reaper.cpp index 1cc9d12c0c7..907542928ba 100644 --- a/src/plugins/coreplugin/reaper.cpp +++ b/src/plugins/coreplugin/reaper.cpp @@ -26,6 +26,7 @@ #include "reaper.h" #include "reaper_p.h" +#include #include #include @@ -36,6 +37,24 @@ namespace Internal { static ReaperPrivate *d = nullptr; +namespace { +void killProcess(QProcess *process) +{ + if (Utils::QtcProcess *qtcProcess = qobject_cast(process)) + qtcProcess->kill(); + else + process->kill(); +} + +void terminateProcess(QProcess *process) +{ + if (Utils::QtcProcess *qtcProcess = qobject_cast(process)) + qtcProcess->terminate(); + else + process->terminate(); +} +} // namespace + ProcessReaper::ProcessReaper(QProcess *p, int timeoutMs) : m_process(p) { d->m_reapers.append(this); @@ -79,12 +98,12 @@ void ProcessReaper::nextIteration() if (state == QProcess::Starting) { if (m_lastState == QProcess::Starting) - m_process->kill(); + killProcess(m_process); } else if (state == QProcess::Running) { if (m_lastState == QProcess::Running) - m_process->kill(); + killProcess(m_process); else - m_process->terminate(); + terminateProcess(m_process); } m_lastState = state;