diff options
author | Markus Handell <handellm@webrtc.org> | 2020-05-14 14:23:21 +0200 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-05-15 09:48:12 +0000 |
commit | 772b1494a948ec1a2499e3320760eca40bf587a2 (patch) | |
tree | 9bc38fb75f6e663474d12a52a0b72fccc60a0b31 /media | |
parent | 8133ffb1879e5350606bfed616befa1ec465bf96 (diff) | |
download | webrtc-772b1494a948ec1a2499e3320760eca40bf587a2.tar.gz |
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}
Diffstat (limited to 'media')
-rw-r--r-- | media/base/media_channel.h | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/media/base/media_channel.h b/media/base/media_channel.h index d71ec9158a..7f9009acd5 100644 --- a/media/base/media_channel.h +++ b/media/base/media_channel.h @@ -203,7 +203,8 @@ class MediaChannel : public sigslot::has_slots<> { // 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 @@ class MediaChannel : public sigslot::has_slots<> { 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 @@ class MediaChannel : public sigslot::has_slots<> { 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 @@ class MediaChannel : public sigslot::has_slots<> { 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; |