diff --git a/test/common/runtime/runtime_impl_test.cc b/test/common/runtime/runtime_impl_test.cc index 3d39c6b8e9a76..41f80ba3b3601 100644 --- a/test/common/runtime/runtime_impl_test.cc +++ b/test/common/runtime/runtime_impl_test.cc @@ -623,25 +623,42 @@ TEST_F(StaticLoaderImplTest, RuntimeFromNonWorkerThreads) { // Now set up a test thread which verifies foo -> bar // // Then change foo and make sure the test thread picks up the change. + bool read_bar = false; + bool updated_eep = false; Thread::MutexBasicLockable mutex; Thread::CondVar foo_read; Thread::CondVar foo_changed; const Snapshot* original_thread_snapshot_pointer = nullptr; auto thread = Thread::threadFactoryForTest().createThread([&]() { - Thread::LockGuard lock(mutex); - EXPECT_EQ("bar", loader_->threadsafeSnapshot()->get("foo")); - original_thread_snapshot_pointer = loader_->threadsafeSnapshot().get(); - EXPECT_EQ(original_thread_snapshot_pointer, loader_->threadsafeSnapshot().get()); - foo_read.notifyOne(); + { + Thread::LockGuard lock(mutex); + EXPECT_EQ("bar", loader_->threadsafeSnapshot()->get("foo")); + read_bar = true; + original_thread_snapshot_pointer = loader_->threadsafeSnapshot().get(); + EXPECT_EQ(original_thread_snapshot_pointer, loader_->threadsafeSnapshot().get()); + foo_read.notifyOne(); + } - foo_changed.wait(mutex); - EXPECT_EQ("eep", loader_->threadsafeSnapshot()->get("foo")); + { + Thread::LockGuard lock(mutex); + if (!updated_eep) { + foo_changed.wait(mutex); + } + EXPECT_EQ("eep", loader_->threadsafeSnapshot()->get("foo")); + } }); { Thread::LockGuard lock(mutex); - foo_read.wait(mutex); + if (!read_bar) { + foo_read.wait(mutex); + } loader_->mergeValues({{"foo", "eep"}}); + updated_eep = true; + } + + { + Thread::LockGuard lock(mutex); foo_changed.notifyOne(); EXPECT_EQ("eep", loader_->threadsafeSnapshot()->get("foo")); }