Do not require synchronization access on the thread if called from rtc::Thread::WrapCurrent. The synchronization access is unnecessary for rtc::Thread::WrapCurrent (called from JingleThreadWrapper) since JingleThreadWrapper never calls rtc::Thread::Stop or rtc::Thread::Join. Failing to get the access caused crashes in Chrome since rtc::Thread::Current will be NULL when rtc::Thread::WrapCurrent fails. rtc::ThreadManager::WrapCurrentThread still requires the synchronization access, since I am not sure if the callers (e.g. the plugin) depends on it. BUG=crbug/413853 R=juberti@webrtc.org, tommi@webrtc.org Review URL: https://webrtc-codereview.appspot.com/30429004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7224 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/base/thread_unittest.cc b/webrtc/base/thread_unittest.cc index 6a54ac7..6a68757 100644 --- a/webrtc/base/thread_unittest.cc +++ b/webrtc/base/thread_unittest.cc
@@ -105,6 +105,13 @@ CustomThread() {} virtual ~CustomThread() { Stop(); } bool Start() { return false; } + + bool WrapCurrent() { + return Thread::WrapCurrent(); + } + void UnwrapCurrent() { + Thread::UnwrapCurrent(); + } }; @@ -240,8 +247,6 @@ } TEST(ThreadTest, Wrap) { - Thread* current_thread = Thread::Current(); - current_thread->UnwrapCurrent(); CustomThread* cthread = new CustomThread(); EXPECT_TRUE(cthread->WrapCurrent()); EXPECT_TRUE(cthread->RunningForTest()); @@ -249,7 +254,6 @@ cthread->UnwrapCurrent(); EXPECT_FALSE(cthread->RunningForTest()); delete cthread; - current_thread->WrapCurrent(); } TEST(ThreadTest, Invoke) {