diff options
| -rw-r--r-- | src/corelib/thread/qfutureinterface.h | 6 | ||||
| -rw-r--r-- | tests/auto/corelib/thread/qfuture/tst_qfuture.cpp | 17 |
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"); |
