From a016c7f4f418e3d2c499b3b9069b147dd56428a3 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 28 Nov 2016 16:09:34 +0100 Subject: [PATCH] RunExtensions: Connect before setting future "connecting after calling setFuture() is likely to produce race" Change-Id: Ia4eecf977fc0a89aff5ac72e42c877d1297d263d Reviewed-by: Vikas Pachdha Reviewed-by: Tobias Hunger --- src/libs/utils/runextensions.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libs/utils/runextensions.h b/src/libs/utils/runextensions.h index 0ba0b8c3c53..0b066b6d8af 100644 --- a/src/libs/utils/runextensions.h +++ b/src/libs/utils/runextensions.h @@ -504,12 +504,12 @@ template const QFuture &onResultReady(const QFuture &future, R *receiver, void(R::*member)(const T &)) { auto watcher = new QFutureWatcher(); - watcher->setFuture(future); QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); QObject::connect(watcher, &QFutureWatcherBase::resultReadyAt, receiver, [receiver, member, watcher](int index) { (receiver->*member)(watcher->future().resultAt(index)); }); + watcher->setFuture(future); return future; } @@ -523,11 +523,11 @@ template const QFuture &onResultReady(const QFuture &future, QObject *guard, Function f) { auto watcher = new QFutureWatcher(); - watcher->setFuture(future); QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); QObject::connect(watcher, &QFutureWatcherBase::resultReadyAt, guard, [f, watcher](int index) { f(watcher->future().resultAt(index)); }); + watcher->setFuture(future); return future; } @@ -540,11 +540,11 @@ template const QFuture &onResultReady(const QFuture &future, Function f) { auto watcher = new QFutureWatcher(); - watcher->setFuture(future); QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); QObject::connect(watcher, &QFutureWatcherBase::resultReadyAt, [f, watcher](int index) { f(watcher->future().resultAt(index)); }); + watcher->setFuture(future); return future; }