Delete NO_MAIN_THREAD_WRAPPING preprocessor define.
Since many tests rely on rtc::Thread::Current(), add an
explicit rtc::AutoThread in the main() function used by tests.
Bug: webrtc:9714
Change-Id: Id82121967c9621fe1c2945846009c48139fa57da
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/39680
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28000}
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 72b7229..418af60 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -15,10 +15,6 @@
import("//build/config/android/rules.gni")
}
-config("rtc_base_chromium_config") {
- defines = [ "NO_MAIN_THREAD_WRAPPING" ]
-}
-
config("rtc_base_all_dependent_config") {
if (is_ios) {
libs = [
@@ -903,7 +899,6 @@
if (build_with_chromium) {
include_dirs = [ "../../boringssl/src/include" ]
- public_configs += [ ":rtc_base_chromium_config" ]
} else {
sources += [
"callback.h",
diff --git a/rtc_base/message_queue_unittest.cc b/rtc_base/message_queue_unittest.cc
index b7c32e3..b31ea6c 100644
--- a/rtc_base/message_queue_unittest.cc
+++ b/rtc_base/message_queue_unittest.cc
@@ -121,20 +121,6 @@
EXPECT_TRUE(deleted);
}
-struct UnwrapMainThreadScope {
- UnwrapMainThreadScope() : rewrap_(Thread::Current() != nullptr) {
- if (rewrap_)
- ThreadManager::Instance()->UnwrapCurrentThread();
- }
- ~UnwrapMainThreadScope() {
- if (rewrap_)
- ThreadManager::Instance()->WrapCurrentThread();
- }
-
- private:
- bool rewrap_;
-};
-
// Ensure that ProcessAllMessageQueues does its essential function; process
// all messages (both delayed and non delayed) up until the current time, on
// all registered message queues.
diff --git a/rtc_base/thread.cc b/rtc_base/thread.cc
index be0d15d..0caa856 100644
--- a/rtc_base/thread.cc
+++ b/rtc_base/thread.cc
@@ -78,19 +78,11 @@
ThreadManager* manager = ThreadManager::Instance();
Thread* thread = manager->CurrentThread();
-#ifndef NO_MAIN_THREAD_WRAPPING
- // Only autowrap the thread which instantiated the ThreadManager.
- if (!thread && manager->IsMainThread()) {
- thread = new Thread(SocketServer::CreateDefault());
- thread->WrapCurrentWithThreadManager(manager, true);
- }
-#endif
-
return thread;
}
#if defined(WEBRTC_POSIX)
-ThreadManager::ThreadManager() : main_thread_ref_(CurrentThreadRef()) {
+ThreadManager::ThreadManager() {
#if defined(WEBRTC_MAC)
InitCocoaMultiThreading();
#endif
@@ -112,8 +104,7 @@
#endif
#if defined(WEBRTC_WIN)
-ThreadManager::ThreadManager()
- : key_(TlsAlloc()), main_thread_ref_(CurrentThreadRef()) {}
+ThreadManager::ThreadManager() : key_(TlsAlloc()) {}
Thread* ThreadManager::CurrentThread() {
return static_cast<Thread*>(TlsGetValue(key_));
@@ -142,10 +133,6 @@
}
}
-bool ThreadManager::IsMainThread() {
- return IsThreadRefEqual(CurrentThreadRef(), main_thread_ref_);
-}
-
Thread::ScopedDisallowBlockingCalls::ScopedDisallowBlockingCalls()
: thread_(Thread::Current()),
previous_state_(thread_->SetAllowBlockingCalls(false)) {}
@@ -574,8 +561,11 @@
AutoThread::AutoThread()
: Thread(SocketServer::CreateDefault(), /*do_init=*/false) {
- DoInit();
if (!ThreadManager::Instance()->CurrentThread()) {
+ // DoInit registers with MessageQueueManager. Do that only if we intend to
+ // be rtc::Thread::Current(), otherwise ProcessAllMessageQueuesInternal will
+ // post a message to a queue that no running thread is serving.
+ DoInit();
ThreadManager::Instance()->SetCurrentThread(this);
}
}
diff --git a/rtc_base/thread.h b/rtc_base/thread.h
index 2b4d020..6b5bdf4 100644
--- a/rtc_base/thread.h
+++ b/rtc_base/thread.h
@@ -102,8 +102,6 @@
Thread* WrapCurrentThread();
void UnwrapCurrentThread();
- bool IsMainThread();
-
private:
ThreadManager();
~ThreadManager();
@@ -116,9 +114,6 @@
const DWORD key_;
#endif
- // The thread to potentially autowrap.
- const PlatformThreadRef main_thread_ref_;
-
RTC_DISALLOW_COPY_AND_ASSIGN(ThreadManager);
};
diff --git a/rtc_base/thread_unittest.cc b/rtc_base/thread_unittest.cc
index c4b6143..55a0e2d 100644
--- a/rtc_base/thread_unittest.cc
+++ b/rtc_base/thread_unittest.cc
@@ -267,15 +267,18 @@
TEST(ThreadTest, Wrap) {
Thread* current_thread = Thread::Current();
- current_thread->UnwrapCurrent();
- CustomThread* cthread = new CustomThread();
- EXPECT_TRUE(cthread->WrapCurrent());
- EXPECT_TRUE(cthread->RunningForTest());
- EXPECT_FALSE(cthread->IsOwned());
- cthread->UnwrapCurrent();
- EXPECT_FALSE(cthread->RunningForTest());
- delete cthread;
- current_thread->WrapCurrent();
+ ThreadManager::Instance()->SetCurrentThread(nullptr);
+
+ {
+ CustomThread cthread;
+ EXPECT_TRUE(cthread.WrapCurrent());
+ EXPECT_EQ(&cthread, Thread::Current());
+ EXPECT_TRUE(cthread.RunningForTest());
+ EXPECT_FALSE(cthread.IsOwned());
+ cthread.UnwrapCurrent();
+ EXPECT_FALSE(cthread.RunningForTest());
+ }
+ ThreadManager::Instance()->SetCurrentThread(current_thread);
}
TEST(ThreadTest, Invoke) {
diff --git a/rtc_base/unittest_main.cc b/rtc_base/unittest_main.cc
index fe3e9e4..8cc1e96 100644
--- a/rtc_base/unittest_main.cc
+++ b/rtc_base/unittest_main.cc
@@ -18,6 +18,7 @@
#include "rtc_base/logging.h"
#include "rtc_base/ssl_adapter.h"
#include "rtc_base/ssl_stream_adapter.h"
+#include "rtc_base/thread.h"
#include "system_wrappers/include/field_trial.h"
#include "system_wrappers/include/metrics.h"
#include "test/field_trial.h"
@@ -123,6 +124,8 @@
rtc::test::InitTestSuite(RUN_ALL_TESTS, argc, argv, false);
rtc::test::RunTestsFromIOSApp();
#endif
+
+ rtc::AutoThread main_thread;
const int res = RUN_ALL_TESTS();
rtc::CleanupSSL();
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 4cd3783..c694ec6 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -1118,6 +1118,7 @@
":peerconnectionfactory_base_objc",
":sdk_unittests_bundle_data",
":sdk_unittests_sources",
+ "../rtc_base",
"//test:test_support",
]
ldflags = [ "-all_load" ]
@@ -1136,6 +1137,7 @@
deps = [
":framework_objc+link",
":ios_framework_bundle",
+ "../rtc_base",
"//test:test_support",
]
}
diff --git a/sdk/objc/unittests/main.mm b/sdk/objc/unittests/main.mm
index 77a88a6..9c51376 100644
--- a/sdk/objc/unittests/main.mm
+++ b/sdk/objc/unittests/main.mm
@@ -10,11 +10,14 @@
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
+#include "rtc_base/thread.h"
#include "test/ios/coverage_util_ios.h"
int main(int argc, char* argv[]) {
rtc::test::ConfigureCoverageReportPath();
+ rtc::AutoThread main_thread;
+
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, nil);
}
diff --git a/test/BUILD.gn b/test/BUILD.gn
index d4706b8..ee3c57c 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -181,6 +181,7 @@
]
deps = [
":perf_test",
+ "../rtc_base",
"../sdk:helpers_objc",
]
configs += [ ":test_support_objc_config" ]
diff --git a/test/ios/test_support.mm b/test/ios/test_support.mm
index 8600597..d034bfe 100644
--- a/test/ios/test_support.mm
+++ b/test/ios/test_support.mm
@@ -10,6 +10,7 @@
#import <UIKit/UIKit.h>
+#include "rtc_base/thread.h"
#include "test/ios/coverage_util_ios.h"
#include "test/ios/test_support.h"
#include "test/testsupport/perf_test.h"
@@ -73,6 +74,8 @@
- (void)runTests {
rtc::test::ConfigureCoverageReportPath();
+ rtc::AutoThread main_thread;
+
int exitStatus = g_test_suite();
if (g_save_chartjson_result) {