(Wangle) Clean up some data races in tests
authorHannes Roth <hannesr@fb.com>
Thu, 25 Jun 2015 15:41:28 +0000 (08:41 -0700)
committerSara Golemon <sgolemon@fb.com>
Fri, 26 Jun 2015 18:45:38 +0000 (11:45 -0700)
Summary: Not 100% about the `ThreadWheelTimekeeper` test. It makes TSAN happy
though.

Reviewed By: @yfeldblum

Differential Revision: D2187901

folly/futures/detail/ThreadWheelTimekeeper.cpp
folly/futures/test/TimekeeperTest.cpp
folly/futures/test/ViaTest.cpp

index 294b71fa11789b3fdcf6ba10083b785fd04e8ef9..8b5745d6849ebbdbcca43b09d9e9f08cc9f33412 100644 (file)
@@ -76,8 +76,8 @@ ThreadWheelTimekeeper::ThreadWheelTimekeeper() :
 ThreadWheelTimekeeper::~ThreadWheelTimekeeper() {
   eventBase_.runInEventBaseThreadAndWait([this]{
     wheelTimer_->cancelAll();
+    eventBase_.terminateLoopSoon();
   });
-  eventBase_.terminateLoopSoon();
   thread_.join();
 }
 
index 0ecdb2d73b53f78c50131f14dbf573ea671a77dc..d913b70d77ce32b4661c5ec0acf4594c6022a3f6 100644 (file)
@@ -52,8 +52,9 @@ TEST_F(TimekeeperFixture, after) {
 
 TEST(Timekeeper, futureGet) {
   Promise<int> p;
-  std::thread([&]{ p.setValue(42); }).detach();
+  auto t = std::thread([&]{ p.setValue(42); });
   EXPECT_EQ(42, p.getFuture().get());
+  t.join();
 }
 
 TEST(Timekeeper, futureGetBeforeTimeout) {
index 77466ac4897203492668598b9aa1f2e66052b59b..5027ed91ca00a70afdb75d06b01fac972094088b 100644 (file)
@@ -72,7 +72,7 @@ struct ViaFixture : public testing::Test {
   std::shared_ptr<ManualExecutor> eastExecutor;
   std::shared_ptr<ManualWaiter> waiter;
   InlineExecutor inlineExecutor;
-  bool done;
+  std::atomic<bool> done;
   std::thread t;
 };