diff options
-rw-r--r-- | libcxx/src/experimental/memory_resource.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/libcxx/src/experimental/memory_resource.cpp b/libcxx/src/experimental/memory_resource.cpp index 046ef02a4bc..ff0fbb6065f 100644 --- a/libcxx/src/experimental/memory_resource.cpp +++ b/libcxx/src/experimental/memory_resource.cpp @@ -11,7 +11,7 @@ #ifndef _LIBCPP_HAS_NO_ATOMIC_HEADER #include "atomic" -#else +#elif !defined(_LIBCPP_HAS_NO_THREADS) #include "mutex" #endif @@ -100,7 +100,7 @@ __default_memory_resource(bool set = false, memory_resource * new_res = nullptr) return _VSTD::atomic_load_explicit( &__res, memory_order::memory_order_acquire); } -#else +#elif !defined(_LIBCPP_HAS_NO_THREADS) static memory_resource * res = &res_init.resources.new_delete_res; static mutex res_lock; if (set) { @@ -113,6 +113,16 @@ __default_memory_resource(bool set = false, memory_resource * new_res = nullptr) lock_guard<mutex> guard(res_lock); return res; } +#else + static memory_resource* res = &res_init.resources.new_delete_res; + if (set) { + new_res = new_res ? new_res : new_delete_resource(); + memory_resource * old_res = res; + res = new_res; + return old_res; + } else { + return res; + } #endif } |