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;
