diff --git a/src/plugins/mesonprojectmanager/mesonprocess.cpp b/src/plugins/mesonprojectmanager/mesonprocess.cpp index da6afe8656e..fbd659ec8af 100644 --- a/src/plugins/mesonprojectmanager/mesonprocess.cpp +++ b/src/plugins/mesonprojectmanager/mesonprocess.cpp @@ -85,6 +85,8 @@ void MesonProcess::setupProcess(const Command &command, const Environment env, bool captureStdo) { + if (m_process) + m_process.release()->deleteLater(); m_process.reset(new QtcProcess); connect(m_process.get(), &QtcProcess::done, this, &MesonProcess::handleProcessDone); if (!captureStdo) { diff --git a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp index dfa8da8e172..8ba63bc0961 100644 --- a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp +++ b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp @@ -196,20 +196,18 @@ QList MesonProjectParser::appsTargets() const } return apps; } + bool MesonProjectParser::startParser() { m_parserFutureResult = Utils::runAsync( - ProjectExplorer::ProjectExplorerPlugin::sharedThreadPool(), - [process = &m_process, - introType = m_introType, - buildDir = m_buildDir.toString(), - srcDir = m_srcDir]() { - if (introType == IntroDataType::file) { - return extractParserResults(srcDir, MesonInfoParser::parse(buildDir)); - } else { - return extractParserResults(srcDir, MesonInfoParser::parse(process->stdOut())); - } - }); + ProjectExplorer::ProjectExplorerPlugin::sharedThreadPool(), + [processOutput = m_process.stdOut(), introType = m_introType, + buildDir = m_buildDir.toString(), srcDir = m_srcDir] { + if (introType == IntroDataType::file) + return extractParserResults(srcDir, MesonInfoParser::parse(buildDir)); + else + return extractParserResults(srcDir, MesonInfoParser::parse(processOutput)); + }); Utils::onFinished(m_parserFutureResult, this, &MesonProjectParser::update); return true;