From 21f42fafb7f6d5a7dd696d83c1892bf5326ff05f Mon Sep 17 00:00:00 2001 From: S David <2100425+s-daveb@users.noreply.github.com> Date: Sun, 22 Dec 2019 00:32:17 -0500 Subject: [PATCH] MacOS: Fixes configuration hang; bump MacOS SDK. Removed conditional use of std::mutex instead of std::shared_mutex on MacOS. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Because MacOS < 10.12 did not support std::shared_mutex, a previous commit naïvely substituted std::mutex, which does not have the same behavior. Reverses PR #8273, which substitues std::mutex for std::shared_mutex on macOS, and results in several bugs that seem to only affect MacOS - https://bugs.dolphin-emu.org/issues/11919 - https://bugs.dolphin-emu.org/issues/11842 - https://bugs.dolphin-emu.org/issues/11845 This change eliminates conditional code for MacOS in the core configuration layer code and enables the use of modern language features that are more secure and thread-safe. --- CMakeLists.txt | 5 ++++- Source/Core/Common/Config/Config.cpp | 13 ------------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bc0176ba82..f97e4d2837 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,10 @@ cmake_minimum_required(VERSION 3.10) set(CMAKE_OSX_ARCHITECTURES "x86_64") # Minimum OS X version. # This is inserted into the Info.plist as well. -set(CMAKE_OSX_DEPLOYMENT_TARGET "10.10.0" CACHE STRING "") + +# MacOS prior to 10.12 did not fully support C++17, which is used to +# handle configuration options +set(CMAKE_OSX_DEPLOYMENT_TARGET "10.12.0" CACHE STRING "") project(dolphin-emu) diff --git a/Source/Core/Common/Config/Config.cpp b/Source/Core/Common/Config/Config.cpp index b65b1d6fad..0dbcb1d9d9 100644 --- a/Source/Core/Common/Config/Config.cpp +++ b/Source/Core/Common/Config/Config.cpp @@ -5,11 +5,7 @@ #include #include #include -#if __APPLE__ -#include -#else #include -#endif #include "Common/Config/Config.h" @@ -21,19 +17,10 @@ static Layers s_layers; static std::list s_callbacks; static u32 s_callback_guards = 0; -// Mac supports shared_mutex since 10.12 and we're targeting 10.10, -// so only use unique locks there... -#if __APPLE__ -static std::mutex s_layers_rw_lock; - -using ReadLock = std::unique_lock; -using WriteLock = std::unique_lock; -#else static std::shared_mutex s_layers_rw_lock; using ReadLock = std::shared_lock; using WriteLock = std::unique_lock; -#endif void AddLayerInternal(std::shared_ptr layer) {