Add thread safety annotation for PeerConnection::event_log_

Plus all the annotations that are necessary to make things compile
again.

Bug: webrtc:9987
Change-Id: I68a51bfa3342c6d66d67276d5979144af34692c9
Reviewed-on: https://webrtc-review.googlesource.com/c/123046
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26716}
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index 3d0f664..af2e554 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -833,6 +833,7 @@
                                std::unique_ptr<Call> call)
     : factory_(factory),
       event_log_(std::move(event_log)),
+      event_log_ptr_(event_log_.get()),
       rtcp_cname_(GenerateRtcpCname()),
       local_streams_(StreamCollection::Create()),
       remote_streams_(StreamCollection::Create()),
@@ -872,6 +873,7 @@
                                  [this] { port_allocator_.reset(); });
   // call_ and event_log_ must be destroyed on the worker thread.
   worker_thread()->Invoke<void>(RTC_FROM_HERE, [this] {
+    RTC_DCHECK_RUN_ON(worker_thread());
     call_.reset();
     // The event log must outlive call (and any other object that uses it).
     event_log_.reset();
@@ -981,7 +983,7 @@
                               ? *configuration.crypto_options
                               : options.crypto_options;
   config.transport_observer = this;
-  config.event_log = event_log_.get();
+  config.event_log = event_log_ptr_;
 #if defined(ENABLE_EXTERNAL_AUTH)
   config.enable_external_auth = true;
 #endif
@@ -3696,6 +3698,7 @@
                                port_allocator_.get()));
 
   worker_thread()->Invoke<void>(RTC_FROM_HERE, [this] {
+    RTC_DCHECK_RUN_ON(worker_thread());
     call_.reset();
     // The event log must outlive call (and any other object that uses it).
     event_log_.reset();
@@ -5271,6 +5274,7 @@
 bool PeerConnection::StartRtcEventLog_w(
     std::unique_ptr<RtcEventLogOutput> output,
     int64_t output_period_ms) {
+  RTC_DCHECK_RUN_ON(worker_thread());
   if (!event_log_) {
     return false;
   }
@@ -5278,6 +5282,7 @@
 }
 
 void PeerConnection::StopRtcEventLog_w() {
+  RTC_DCHECK_RUN_ON(worker_thread());
   if (event_log_) {
     event_log_->StopLogging();
   }
diff --git a/pc/peer_connection.h b/pc/peer_connection.h
index 321acde..419c608 100644
--- a/pc/peer_connection.h
+++ b/pc/peer_connection.h
@@ -1033,7 +1033,11 @@
       nullptr;
 
   // The EventLog needs to outlive |call_| (and any other object that uses it).
-  std::unique_ptr<RtcEventLog> event_log_;
+  std::unique_ptr<RtcEventLog> event_log_ RTC_GUARDED_BY(worker_thread());
+
+  // Points to the same thing as `event_log_`. Since it's const, we may read the
+  // pointer (but not touch the object) from any thread.
+  RtcEventLog* const event_log_ptr_ RTC_PT_GUARDED_BY(worker_thread());
 
   SignalingState signaling_state_ = kStable;
   IceConnectionState ice_connection_state_ = kIceConnectionNew;