Make Observer stress test pass a stress run
authorAndrii Grynenko <andrii@fb.com>
Tue, 15 Nov 2016 02:07:46 +0000 (18:07 -0800)
committerFacebook Github Bot <facebook-github-bot-bot@fb.com>
Tue, 15 Nov 2016 02:08:37 +0000 (18:08 -0800)
Reviewed By: yfeldblum

Differential Revision: D4179908

fbshipit-source-id: 493b302cd7e9f7ebc851599b2ca5988af817387d

folly/experimental/observer/test/ObserverTest.cpp

index edb6c11dcdf066e57f4fa7b00f14307612fe4c7c..5605f6ab69bc2380c55e69c2ac1a2997b2504c67 100644 (file)
@@ -209,17 +209,17 @@ TEST(Observer, Cycle) {
 TEST(Observer, Stress) {
   SimpleObservable<int> observable(0);
 
-  folly::Synchronized<std::vector<int>> values;
+  auto values = std::make_shared<folly::Synchronized<std::vector<int>>>();
 
-  auto observer = makeObserver([ child = observable.getObserver(), &values ]() {
+  auto observer = makeObserver([ child = observable.getObserver(), values ]() {
     auto value = **child * 10;
-    values.withWLock(
+    values->withWLock(
         [&](std::vector<int>& values) { values.push_back(value); });
     return value;
   });
 
   EXPECT_EQ(0, **observer);
-  values.withRLock([](const std::vector<int>& values) {
+  values->withRLock([](const std::vector<int>& values) {
     EXPECT_EQ(1, values.size());
     EXPECT_EQ(0, values.back());
   });
@@ -234,7 +234,7 @@ TEST(Observer, Stress) {
     std::this_thread::yield();
   }
 
-  values.withRLock([numIters = numIters](const std::vector<int>& values) {
+  values->withRLock([numIters = numIters](const std::vector<int>& values) {
     EXPECT_EQ(numIters * 10, values.back());
     EXPECT_LT(values.size(), numIters / 2);