Remove aggressive thread checker from WeakPtrReference
This allows to create WeakPtr and dereference it on different threads.
Fix test to validate it.
Bug: webrtc:8517
Change-Id: Idaf0bbdcf14bffbe43cb5fb6514041e8fa746004
Reviewed-on: https://webrtc-review.googlesource.com/21700
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20634}
diff --git a/rtc_base/weak_ptr_unittest.cc b/rtc_base/weak_ptr_unittest.cc
index 0a2dcea..c22032b 100644
--- a/rtc_base/weak_ptr_unittest.cc
+++ b/rtc_base/weak_ptr_unittest.cc
@@ -221,13 +221,21 @@
}
TEST(WeakPtrTest, WeakPtrInitiateAndUseOnDifferentThreads) {
- // Test that it is OK to create an object that has a WeakPtr member on one
- // thread, but use it on another. This tests that we do not trip runtime
- // checks that ensure that a WeakPtr is not used by multiple threads.
- std::unique_ptr<Arrow> arrow(NewObjectCreatedOnTaskQueue<Arrow>());
- TargetWithFactory target;
- arrow->target = target.factory.GetWeakPtr();
- EXPECT_EQ(&target, arrow->target.get());
+ // Test that it is OK to create a WeakPtr on one thread, but use it on
+ // another. This tests that we do not trip runtime checks that ensure that a
+ // WeakPtr is not used by multiple threads.
+ auto target = rtc::MakeUnique<TargetWithFactory>();
+ // Create weak ptr on main thread
+ WeakPtr<Target> weak_ptr = target->factory.GetWeakPtr();
+ rtc::TaskQueue queue("queue");
+ rtc::Event done(false, false);
+ queue.PostTask([&] {
+ // Dereference and invalide weak_ptr on another thread.
+ EXPECT_EQ(weak_ptr.get(), target.get());
+ target.reset();
+ done.Set();
+ });
+ EXPECT_TRUE(done.Wait(1000));
}
} // namespace rtc