From 6a3e687d140cad3dec006b2d5fa8982d4b10f31c Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Tue, 2 Feb 2016 22:48:30 +0200 Subject: [PATCH] Git: Fix crash on Grep If the process is already finished, and cancel is triggered Creator crashes. For example, search for "q" in qt-creator, wait for >200K popup, then wait a few seconds for the process to finish and press Cancel. The reason for the crash is that reportFinished() is called twice - one from GitGrepRunner::finish() and another one from Utils::runAsyncImpl(). Change-Id: I61d379f5e3a5ae86c9a48a3751dbb2e00203516d Reviewed-by: Eike Ziller --- src/plugins/git/gitgrep.cpp | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/plugins/git/gitgrep.cpp b/src/plugins/git/gitgrep.cpp index 51088ceb11d..20ec0507479 100644 --- a/src/plugins/git/gitgrep.cpp +++ b/src/plugins/git/gitgrep.cpp @@ -122,13 +122,6 @@ public: m_fi.reportResult(resultList); } - void finish() - { - read(); - m_fi.setProgressValue(1); - m_fi.reportFinished(); - } - void exec() { m_fi.setProgressRange(0, 1); @@ -158,16 +151,17 @@ public: &m_process, &QtcProcess::kill); connect(&m_process, &QProcess::readyRead, this, &GitGrepRunner::read); - connect(&m_process, static_cast(&QProcess::finished), - this, &GitGrepRunner::finish); - QEventLoop eventLoop; - connect(&watcher, &QFutureWatcher::finished, - &eventLoop, &QEventLoop::quit); m_process.start(); if (!m_process.waitForStarted()) return; - m_fi.reportStarted(); + QEventLoop eventLoop; + connect(&m_process, static_cast(&QProcess::finished), + this, [this, &eventLoop]() { + read(); + eventLoop.quit(); + }); eventLoop.exec(); + m_fi.setProgressValue(1); } static void run(QFutureInterface &fi,