[tsan] Guard OwnerThread against concurrent access.

Prevent potential concurrent access of OwnerThread::has_run_ from:
 * Main thread via HasRun()
 * Signal thread via Run()
when running SignalThreadTest.OwnerThreadGoesAway.

Bug: webrtc:9855
Change-Id: I8951026a64794c085b4ac799ed4b74521b97f42a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/151760
Commit-Queue: Yves Gerey <yvesg@google.com>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29087}
diff --git a/rtc_base/signal_thread_unittest.cc b/rtc_base/signal_thread_unittest.cc
index d9304d4..9375b50 100644
--- a/rtc_base/signal_thread_unittest.cc
+++ b/rtc_base/signal_thread_unittest.cc
@@ -14,9 +14,11 @@
 
 #include "absl/memory/memory.h"
 #include "rtc_base/constructor_magic.h"
+#include "rtc_base/critical_section.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/null_socket_server.h"
 #include "rtc_base/thread.h"
+#include "rtc_base/thread_annotations.h"
 #include "test/gtest.h"
 
 namespace rtc {
@@ -146,17 +148,24 @@
     signal_thread->Release();
     // Delete |signal_thread|.
     signal_thread->Destroy(true);
-    has_run_ = true;
+    {
+      rtc::CritScope cs(&crit_);
+      has_run_ = true;
+    }
   }
 
-  bool has_run() { return has_run_; }
-  void OnWorkDone(SignalThread* signal_thread) {
+  bool has_run() {
+    rtc::CritScope cs(&crit_);
+    return has_run_;
+  }
+  void OnWorkDone(SignalThread* /*signal_thread*/) {
     FAIL() << " This shouldn't get called.";
   }
 
  private:
+  rtc::CriticalSection crit_;
   SignalThreadTest* harness_;
-  bool has_run_;
+  bool has_run_ RTC_GUARDED_BY(crit_);
   RTC_DISALLOW_COPY_AND_ASSIGN(OwnerThread);
 };