From 8e219fc76379307ea83557002810e25a1640cc7b Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sat, 25 Apr 2026 13:21:37 -0500 Subject: [PATCH] DiscIO/CachedBlob: Minor cleanup by replacing std::thread with std::jthread. --- CMakeLists.txt | 23 ++++++++++++++++++----- Source/CMakeLists.txt | 2 -- Source/Core/DiscIO/CachedBlob.cpp | 11 ++--------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f07566c044..a8f0d6c998 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,11 +27,9 @@ if (CMAKE_VERSION VERSION_LESS "3.25" AND CMAKE_SYSTEM_NAME MATCHES "Linux") set(LINUX TRUE) endif() -if (MSVC) - set(CMAKE_C_STANDARD 99) - set(CMAKE_CXX_STANDARD 23) - set(CMAKE_CXX_STANDARD_REQUIRED ON) -endif() +set(CMAKE_C_STANDARD 99) +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) set(COMPILER ${CMAKE_CXX_COMPILER_ID}) if (COMPILER STREQUAL "GNU") @@ -159,6 +157,7 @@ list(APPEND CMAKE_MODULE_PATH # Support functions include(CheckAndAddFlag) include(CheckCCompilerFlag) +include(CheckCXXSourceCompiles) include(CheckSymbolExists) include(DolphinCompileDefinitions) include(DolphinDisableWarningsMSVC) @@ -166,6 +165,20 @@ include(DolphinLibraryTools) include(GNUInstallDirs) include(RemoveCompileFlag) +# std::jthread is guarded behind -fexperimental-library prior to libc++ version 20 +check_cxx_source_compiles([[ +#if defined(_LIBCPP_VERSION) +#if _LIBCPP_VERSION < 200000 +#error libc++ version < 20 +#endif +#endif +int main() {} +]] IS_JTHREAD_STABLE) + +if(NOT IS_JTHREAD_STABLE) + add_compile_options(-fexperimental-library) +endif() + # Enable folders for IDE set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 7871083785..a76bb06207 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -16,8 +16,6 @@ if(CMAKE_SYSTEM_NAME MATCHES "Windows") endif() if (NOT MSVC) - set(CMAKE_CXX_STANDARD 23) - set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) endif() diff --git a/Source/Core/DiscIO/CachedBlob.cpp b/Source/Core/DiscIO/CachedBlob.cpp index f1bbf055ee..f59e09a095 100644 --- a/Source/Core/DiscIO/CachedBlob.cpp +++ b/Source/Core/DiscIO/CachedBlob.cpp @@ -24,12 +24,6 @@ public: { } - ~CacheFiller() - { - m_stop_thread.store(true, std::memory_order_relaxed); - m_thread.join(); - } - bool Read(u64 offset, u64 size, u8* out_ptr) { if (size == 0) @@ -126,7 +120,7 @@ private: while (true) { - if (m_stop_thread.load(std::memory_order_relaxed)) + if (m_thread.get_stop_token().stop_requested()) { INFO_LOG_FMT(DISCIO, "CachedBlobReader: Stopped"); break; @@ -178,8 +172,7 @@ private: DiscScrubber m_scrubber; - std::atomic_bool m_stop_thread{}; - std::thread m_thread; + std::jthread m_thread; }; class CachedBlobReader final : public BlobReader