Locator: Fix deadlock

Updating the completion list is done in a separate thread, and for the
all and current project filters that requires a slot to be synchronously
executed on the main thread.
Triggering the update first canceled a running update and waited for
it to finish, before starting the next update. If the first update
hadn't run its code on the main thread yet, it was never be able to,
and never finished.

The patch just removes the waitForFinished after the cancel. There is no
reason to wait, since we retrieve all results only when we get the
finished signal of a non-canceled update anyhow.

Broke with 05c267673f when fixing
QTCREATORBUG-12592

Task-number: QTCREATORBUG-12875
Change-Id: Iba9d46d469e6b2c7e894963d964c2eaca4bc4d93
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
This commit is contained in:
Eike Ziller
2014-08-21 17:25:27 +02:00
parent e0b518b832
commit 6fc39f0c41

View File

@@ -483,7 +483,6 @@ void LocatorWidget::updateCompletionList(const QString &text)
// cancel the old future // cancel the old future
m_entriesWatcher->future().cancel(); m_entriesWatcher->future().cancel();
m_entriesWatcher->future().waitForFinished();
QFuture<LocatorFilterEntry> future = QtConcurrent::run(runSearch, filters, searchText); QFuture<LocatorFilterEntry> future = QtConcurrent::run(runSearch, filters, searchText);
m_entriesWatcher->setFuture(future); m_entriesWatcher->setFuture(future);