aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/gitgrep.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2016-02-02 22:48:30 +0200
committerOrgad Shaneh <orgads@gmail.com>2016-02-03 08:13:58 +0000
commit6a3e687d140cad3dec006b2d5fa8982d4b10f31c (patch)
tree57c5416c87338842098681030f5f9ba3aa14ce31 /src/plugins/git/gitgrep.cpp
parent5646480f27007789429c7e813423c7f142810cc3 (diff)
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 <eike.ziller@theqtcompany.com>
Diffstat (limited to 'src/plugins/git/gitgrep.cpp')
-rw-r--r--src/plugins/git/gitgrep.cpp20
1 files 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<void(QProcess::*)(int)>(&QProcess::finished),
- this, &GitGrepRunner::finish);
- QEventLoop eventLoop;
- connect(&watcher, &QFutureWatcher<FileSearchResultList>::finished,
- &eventLoop, &QEventLoop::quit);
m_process.start();
if (!m_process.waitForStarted())
return;
- m_fi.reportStarted();
+ QEventLoop eventLoop;
+ connect(&m_process, static_cast<void(QProcess::*)(int)>(&QProcess::finished),
+ this, [this, &eventLoop]() {
+ read();
+ eventLoop.quit();
+ });
eventLoop.exec();
+ m_fi.setProgressValue(1);
}
static void run(QFutureInterface<FileSearchResultList> &fi,