From b7d3eae8c20abb7a09020e28447d1036feb38dab Mon Sep 17 00:00:00 2001 From: psucien Date: Mon, 24 Nov 2025 20:54:23 +0100 Subject: [PATCH] Async changed to `packaged_task` --- src/video_core/cache_storage.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/video_core/cache_storage.cpp b/src/video_core/cache_storage.cpp index e34664898..1c46a4cf5 100644 --- a/src/video_core/cache_storage.cpp +++ b/src/video_core/cache_storage.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -23,7 +24,7 @@ namespace { std::mutex submit_mutex{}; u32 num_requests{}; std::condition_variable_any request_cv{}; -std::queue> req_queue{}; +std::queue> req_queue{}; std::mutex m_request{}; mz_zip_archive zip_ar{}; @@ -47,7 +48,7 @@ void ProcessIO(const std::stop_token& stoken) { } while (num_requests) { - std::future request{}; + std::packaged_task request{}; { std::scoped_lock lock{m_request}; if (req_queue.empty()) { @@ -58,7 +59,8 @@ void ProcessIO(const std::stop_token& stoken) { } if (request.valid()) { - request.wait(); + request(); + request.get_future().wait(); } --num_requests; @@ -135,10 +137,10 @@ void DataBase::Close() { } template -bool WriteVector(BlobType type, std::filesystem::path&& path_, std::vector&& v) { - auto request = std::async( - Config::isPipelineCacheArchived() ? std::launch::deferred : std::launch::async, - [=](std::filesystem::path&& path) { +bool WriteVector(const BlobType type, std::filesystem::path&& path_, std::vector&& v) { + { + auto request = std::packaged_task{[=]() { + auto path{path_}; path.replace_extension(GetBlobFileExtension(type)); if (Config::isPipelineCacheArchived()) { ASSERT_MSG(!ar_is_read_only, @@ -152,10 +154,7 @@ bool WriteVector(BlobType type, std::filesystem::path&& path_, std::vector&& const auto file = IOFile{path, FileAccessMode::Create}; file.Write(v); } - }, - path_); - - { + }}; std::scoped_lock lock{m_request}; req_queue.emplace(std::move(request)); }