MediaChannel: remove lock recursions.

This change removes lock recursions and adds thread annotations.

Bug: webrtc:11567
Change-Id: I2730e8159673e7a2802ab0525ebcf26be0e36fd7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/175100
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31270}
diff --git a/media/base/media_channel.h b/media/base/media_channel.h
index d71ec91..7f9009a 100644
--- a/media/base/media_channel.h
+++ b/media/base/media_channel.h
@@ -203,7 +203,8 @@
   // transport.
   virtual void SetInterface(
       NetworkInterface* iface,
-      const webrtc::MediaTransportConfig& media_transport_config);
+      const webrtc::MediaTransportConfig& media_transport_config)
+      RTC_LOCKS_EXCLUDED(network_interface_crit_);
   // Called when a RTP packet is received.
   virtual void OnPacketReceived(rtc::CopyOnWriteBuffer packet,
                                 int64_t packet_time_us) = 0;
@@ -264,12 +265,9 @@
 
   int SetOption(NetworkInterface::SocketType type,
                 rtc::Socket::Option opt,
-                int option) {
+                int option) RTC_LOCKS_EXCLUDED(network_interface_crit_) {
     rtc::CritScope cs(&network_interface_crit_);
-    if (!network_interface_)
-      return -1;
-
-    return network_interface_->SetOption(type, opt, option);
+    return SetOptionLocked(type, opt, option);
   }
 
   const webrtc::MediaTransportConfig& media_transport_config() const {
@@ -298,16 +296,27 @@
       rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer);
 
  protected:
+  int SetOptionLocked(NetworkInterface::SocketType type,
+                      rtc::Socket::Option opt,
+                      int option)
+      RTC_EXCLUSIVE_LOCKS_REQUIRED(network_interface_crit_) {
+    if (!network_interface_)
+      return -1;
+    return network_interface_->SetOption(type, opt, option);
+  }
+
   bool DscpEnabled() const { return enable_dscp_; }
 
   // This is the DSCP value used for both RTP and RTCP channels if DSCP is
   // enabled. It can be changed at any time via |SetPreferredDscp|.
-  rtc::DiffServCodePoint PreferredDscp() const {
+  rtc::DiffServCodePoint PreferredDscp() const
+      RTC_LOCKS_EXCLUDED(network_interface_crit_) {
     rtc::CritScope cs(&network_interface_crit_);
     return preferred_dscp_;
   }
 
-  int SetPreferredDscp(rtc::DiffServCodePoint preferred_dscp) {
+  int SetPreferredDscp(rtc::DiffServCodePoint preferred_dscp)
+      RTC_LOCKS_EXCLUDED(network_interface_crit_) {
     rtc::CritScope cs(&network_interface_crit_);
     if (preferred_dscp == preferred_dscp_) {
       return 0;
@@ -322,16 +331,19 @@
   int UpdateDscp() RTC_EXCLUSIVE_LOCKS_REQUIRED(network_interface_crit_) {
     rtc::DiffServCodePoint value =
         enable_dscp_ ? preferred_dscp_ : rtc::DSCP_DEFAULT;
-    int ret = SetOption(NetworkInterface::ST_RTP, rtc::Socket::OPT_DSCP, value);
+    int ret =
+        SetOptionLocked(NetworkInterface::ST_RTP, rtc::Socket::OPT_DSCP, value);
     if (ret == 0) {
-      ret = SetOption(NetworkInterface::ST_RTCP, rtc::Socket::OPT_DSCP, value);
+      ret = SetOptionLocked(NetworkInterface::ST_RTCP, rtc::Socket::OPT_DSCP,
+                            value);
     }
     return ret;
   }
 
   bool DoSendPacket(rtc::CopyOnWriteBuffer* packet,
                     bool rtcp,
-                    const rtc::PacketOptions& options) {
+                    const rtc::PacketOptions& options)
+      RTC_LOCKS_EXCLUDED(network_interface_crit_) {
     rtc::CritScope cs(&network_interface_crit_);
     if (!network_interface_)
       return false;