diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/httpserver/qhttpserverfutureresponse.cpp | 27 | ||||
-rw-r--r-- | src/httpserver/qhttpserverfutureresponse.h | 24 |
2 files changed, 28 insertions, 23 deletions
diff --git a/src/httpserver/qhttpserverfutureresponse.cpp b/src/httpserver/qhttpserverfutureresponse.cpp index 3d2784b..2409e6a 100644 --- a/src/httpserver/qhttpserverfutureresponse.cpp +++ b/src/httpserver/qhttpserverfutureresponse.cpp @@ -61,6 +61,33 @@ QT_BEGIN_NAMESPACE \endcode */ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + +QHttpServerResponse QFutureInterface<QHttpServerResponse>::takeResult() +{ + if (isCanceled()) { + exceptionStore().throwPossibleException(); + return QHttpServerResponse::StatusCode::NotFound; + } + // Note: we wait for all, this is intentional, + // not to mess with other unready results. + waitForResult(-1); + +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) + std::lock_guard<QMutex> locker{*mutex()}; +#else + std::lock_guard<QMutex> locker{mutex(0)}; +#endif + QtPrivate::ResultIteratorBase position = resultStoreBase().resultAt(0); + auto ret = std::move_if_noexcept( + *const_cast<QHttpServerResponse *>(position.pointer<QHttpServerResponse>())); + resultStoreBase().template clear<QHttpServerResponse>(); + + return ret; +} + +#endif // QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + struct QResponseWatcher : public QFutureWatcher<QHttpServerResponse> { Q_OBJECT diff --git a/src/httpserver/qhttpserverfutureresponse.h b/src/httpserver/qhttpserverfutureresponse.h index 45dc376..d5c8fe1 100644 --- a/src/httpserver/qhttpserverfutureresponse.h +++ b/src/httpserver/qhttpserverfutureresponse.h @@ -104,29 +104,7 @@ public: QFutureInterfaceBase::reportFinished(); } - QHttpServerResponse takeResult() - { - if (isCanceled()) { - exceptionStore().throwPossibleException(); - return QHttpServerResponse::StatusCode::NotFound; - } - - // Note: we wait for all, this is intentional, - // not to mess with other unready results. - waitForResult(-1); - -#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) - std::lock_guard<QMutex> locker{*mutex()}; -#else - std::lock_guard<QMutex> locker{mutex(0)}; -#endif - QtPrivate::ResultIteratorBase position = resultStoreBase().resultAt(0); - auto ret = std::move_if_noexcept( - *const_cast<QHttpServerResponse *>(position.pointer<QHttpServerResponse>())); - resultStoreBase().template clear<QHttpServerResponse>(); - - return ret; - } + QHttpServerResponse takeResult(); }; #endif // QT_VERSION < QT_VERSION_CHECK(6, 0, 0) |