forked from qt-creator/qt-creator
Do QFutureWatcher::setFuture() after connecting to watcher's signals
Otherwise we may have race condition. Reference: documentation for QFutureWatcher::setFuture() and the implementation of QFutureInterfaceBasePrivate::connectOutputInterface( QFutureCallOutInterface *interface). Change-Id: I5b483baaf1b844871a162f47ce7683e9ff495acb Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -113,10 +113,10 @@ QFutureWatcher<ChangeSet> *LanguageClientFormatter::format(
|
||||
m_ignoreCancel = true;
|
||||
m_progress.reportStarted();
|
||||
auto watcher = new QFutureWatcher<ChangeSet>();
|
||||
watcher->setFuture(m_progress.future());
|
||||
QObject::connect(watcher, &QFutureWatcher<Text::Replacements>::canceled, [this]() {
|
||||
cancelCurrentRequest();
|
||||
});
|
||||
watcher->setFuture(m_progress.future());
|
||||
return watcher;
|
||||
}
|
||||
|
||||
|
||||
@@ -162,11 +162,11 @@ QList<Core::LocatorFilterEntry> DocumentLocatorFilter::matchesFor(
|
||||
QEventLoop loop;
|
||||
connect(this, &DocumentLocatorFilter::symbolsUpToDate, &loop, [&]() { loop.exit(1); });
|
||||
QFutureWatcher<Core::LocatorFilterEntry> watcher;
|
||||
watcher.setFuture(future.future());
|
||||
connect(&watcher,
|
||||
&QFutureWatcher<Core::LocatorFilterEntry>::canceled,
|
||||
&loop,
|
||||
&QEventLoop::quit);
|
||||
watcher.setFuture(future.future());
|
||||
locker.unlock();
|
||||
if (!loop.exec())
|
||||
return {};
|
||||
@@ -263,11 +263,11 @@ QList<Core::LocatorFilterEntry> WorkspaceLocatorFilter::matchesFor(
|
||||
QEventLoop loop;
|
||||
connect(this, &WorkspaceLocatorFilter::allRequestsFinished, &loop, [&]() { loop.exit(1); });
|
||||
QFutureWatcher<Core::LocatorFilterEntry> watcher;
|
||||
watcher.setFuture(future.future());
|
||||
connect(&watcher,
|
||||
&QFutureWatcher<Core::LocatorFilterEntry>::canceled,
|
||||
&loop,
|
||||
&QEventLoop::quit);
|
||||
watcher.setFuture(future.future());
|
||||
locker.unlock();
|
||||
if (!loop.exec())
|
||||
return {};
|
||||
|
||||
Reference in New Issue
Block a user