diff options
Diffstat (limited to 'libcxx/include/mutex')
-rw-r--r-- | libcxx/include/mutex | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/libcxx/include/mutex b/libcxx/include/mutex index 0adf1e69bf2..373d75b0978 100644 --- a/libcxx/include/mutex +++ b/libcxx/include/mutex @@ -175,6 +175,7 @@ template<class Callable, class ...Args> #include <__config> #include <__mutex_base> #include <functional> +#include <memory> #ifndef _LIBCPP_HAS_NO_VARIADICS #include <tuple> #endif @@ -539,7 +540,7 @@ inline _LIBCPP_INLINE_VISIBILITY void call_once(once_flag& __flag, _Callable&& __func, _Args&&... __args) { - if (__flag.__state_ != ~0ul) + if (__libcpp_relaxed_load(&__flag.__state_) != ~0ul) { typedef tuple<_Callable&&, _Args&&...> _Gp; _Gp __f(_VSTD::forward<_Callable>(__func), _VSTD::forward<_Args>(__args)...); @@ -555,7 +556,7 @@ inline _LIBCPP_INLINE_VISIBILITY void call_once(once_flag& __flag, _Callable& __func) { - if (__flag.__state_ != ~0ul) + if (__libcpp_relaxed_load(&__flag.__state_) != ~0ul) { __call_once_param<_Callable> __p(__func); __call_once(__flag.__state_, &__p, &__call_once_proxy<_Callable>); |