Add missing acquire_load to call_once overload.
authorJustin Lebar <jlebar@google.com>
Sun, 23 Apr 2017 16:58:48 +0000 (16:58 +0000)
committerJustin Lebar <jlebar@google.com>
Sun, 23 Apr 2017 16:58:48 +0000 (16:58 +0000)
Summary: Seemed to have been overlooked in D24028.

This bug was found and brought to my attention by Paul Wankadia.

Reviewers: kubamracek, EricWF, dvyukov

Differential Revision: https://reviews.llvm.org/D32402

llvm-svn: 301132

libcxx/include/mutex

index e92baa5..0b25614 100644 (file)
@@ -685,7 +685,7 @@ inline _LIBCPP_INLINE_VISIBILITY
 void
 call_once(once_flag& __flag, const _Callable& __func)
 {
-    if (__flag.__state_ != ~0ul)
+    if (__libcpp_acquire_load(&__flag.__state_) != ~0ul)
     {
         __call_once_param<const _Callable> __p(__func);
         __call_once(__flag.__state_, &__p, &__call_once_proxy<const _Callable>);