summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/thread/qfutureinterface.h6
-rw-r--r--tests/auto/corelib/thread/qfuture/tst_qfuture.cpp17
2 files changed, 19 insertions, 4 deletions
diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h
index 01d2f595aeb..0b88013800e 100644
--- a/src/corelib/thread/qfutureinterface.h
+++ b/src/corelib/thread/qfutureinterface.h
@@ -445,12 +445,11 @@ inline QList<T> QFutureInterface<T>::results()
template<typename T>
T QFutureInterface<T>::takeResult()
{
- Q_ASSERT(isValid());
-
// Note: we wait for all, this is intentional,
// not to mess with other unready results.
waitForResult(-1);
+ Q_ASSERT(isValid());
Q_ASSERT(!hasException());
const QMutexLocker<QMutex> locker{&mutex()};
@@ -466,10 +465,9 @@ T QFutureInterface<T>::takeResult()
template<typename T>
std::vector<T> QFutureInterface<T>::takeResults()
{
- Q_ASSERT(isValid());
-
waitForResult(-1);
+ Q_ASSERT(isValid());
Q_ASSERT(!hasException());
std::vector<T> res;
diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
index edeae669515..800c6236d9d 100644
--- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
+++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
@@ -216,6 +216,7 @@ private slots:
#endif
void takeResult();
void runAndTake();
+ void takeResultWaitForStartedFinished();
void resultsReadyAt_data();
void resultsReadyAt();
void takeResultWorksForTypesWithoutDefaultCtor();
@@ -3625,6 +3626,22 @@ void tst_QFuture::runAndTake()
#endif
}
+void tst_QFuture::takeResultWaitForStartedFinished()
+{
+ QPromise<int> promise{QFutureInterface<int>{QFutureInterfaceBase::State::Pending}};
+ auto future = promise.future();
+ const std::unique_ptr<QThread> thread(QThread::create(
+ [](QPromise<int> promise) {
+ QThread::msleep(100);
+ promise.start();
+ promise.addResult(11);
+ promise.finish();
+ },
+ std::move(promise)));
+ thread->start();
+ QCOMPARE(future.takeResult(), 11);
+}
+
void tst_QFuture::resultsReadyAt_data()
{
QTest::addColumn<bool>("testMove");