From: Martin Martin Date: Thu, 9 Jun 2016 18:53:14 +0000 (-0700) Subject: Fix a data race found by TSAN in folly::fibers::Baton X-Git-Tag: 2016.07.26~154 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=e967876f1167e630263555c985c4723f7df9167a;p=folly.git Fix a data race found by TSAN in folly::fibers::Baton Summary: Fix a data race found by TSAN in folly::fibers::Baton by changing a memory_order_relaxed to memory_order_acquire. Nathan Bronson says that TSAN is correct and the C++ memory model requires _acquire here. Reviewed By: andriigrynenko Differential Revision: D3412519 fbshipit-source-id: bd0043b41d145e689a97fc7ef47aa6e116ea9194 --- diff --git a/folly/fibers/Baton.cpp b/folly/fibers/Baton.cpp index 7161f9fb..5f5a104c 100644 --- a/folly/fibers/Baton.cpp +++ b/folly/fibers/Baton.cpp @@ -58,7 +58,7 @@ void Baton::waitThread() { waitingFiber_.compare_exchange_strong(fiber, THREAD_WAITING))) { do { folly::detail::MemoryIdler::futexWait(futex_.futex, THREAD_WAITING); - fiber = waitingFiber_.load(std::memory_order_relaxed); + fiber = waitingFiber_.load(std::memory_order_acquire); } while (fiber == THREAD_WAITING); }