Add thread safety annotations for some more PeerConnection members
Plus all the annotations that were necessary to make things compile again. port_allocator_flags_ was accessed on both the signaling and the network thread, but I was able to replace it with a return value. Bug: webrtc:9987 Change-Id: Iab977a49d6588ce2240487475ec3588ae579caa1 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/128772 Reviewed-by: Steve Anton <steveanton@webrtc.org> Commit-Queue: Karl Wiberg <kwiberg@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27254}
This commit is contained in:
parent
c771c805f1
commit
fb3be3948d
@ -907,8 +907,10 @@ PeerConnection::~PeerConnection() {
|
||||
transport_controller_.reset();
|
||||
|
||||
// port_allocator_ lives on the network thread and should be destroyed there.
|
||||
network_thread()->Invoke<void>(RTC_FROM_HERE,
|
||||
[this] { port_allocator_.reset(); });
|
||||
network_thread()->Invoke<void>(RTC_FROM_HERE, [this] {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
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());
|
||||
@ -977,12 +979,12 @@ bool PeerConnection::Initialize(
|
||||
|
||||
// The port allocator lives on the network thread and should be initialized
|
||||
// there.
|
||||
if (!network_thread()->Invoke<bool>(
|
||||
const auto pa_result =
|
||||
network_thread()->Invoke<InitializePortAllocatorResult>(
|
||||
RTC_FROM_HERE,
|
||||
rtc::Bind(&PeerConnection::InitializePortAllocator_n, this,
|
||||
stun_servers, turn_servers, configuration))) {
|
||||
return false;
|
||||
}
|
||||
stun_servers, turn_servers, configuration));
|
||||
|
||||
// If initialization was successful, note if STUN or TURN servers
|
||||
// were supplied.
|
||||
if (!stun_servers.empty()) {
|
||||
@ -994,7 +996,7 @@ bool PeerConnection::Initialize(
|
||||
|
||||
// Send information about IPv4/IPv6 status.
|
||||
PeerConnectionAddressFamilyCounter address_family;
|
||||
if (port_allocator_flags_ & cricket::PORTALLOCATOR_ENABLE_IPV6) {
|
||||
if (pa_result.enable_ipv6) {
|
||||
address_family = kPeerConnection_IPv6;
|
||||
} else {
|
||||
address_family = kPeerConnection_IPv4;
|
||||
@ -5290,48 +5292,51 @@ DataChannel* PeerConnection::FindDataChannelBySid(int sid) const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool PeerConnection::InitializePortAllocator_n(
|
||||
PeerConnection::InitializePortAllocatorResult
|
||||
PeerConnection::InitializePortAllocator_n(
|
||||
const cricket::ServerAddresses& stun_servers,
|
||||
const std::vector<cricket::RelayServerConfig>& turn_servers,
|
||||
const RTCConfiguration& configuration) {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
|
||||
port_allocator_->Initialize();
|
||||
// To handle both internal and externally created port allocator, we will
|
||||
// enable BUNDLE here.
|
||||
port_allocator_flags_ = port_allocator_->flags();
|
||||
port_allocator_flags_ |= cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET |
|
||||
cricket::PORTALLOCATOR_ENABLE_IPV6 |
|
||||
cricket::PORTALLOCATOR_ENABLE_IPV6_ON_WIFI;
|
||||
int port_allocator_flags = port_allocator_->flags();
|
||||
port_allocator_flags |= cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET |
|
||||
cricket::PORTALLOCATOR_ENABLE_IPV6 |
|
||||
cricket::PORTALLOCATOR_ENABLE_IPV6_ON_WIFI;
|
||||
// If the disable-IPv6 flag was specified, we'll not override it
|
||||
// by experiment.
|
||||
if (configuration.disable_ipv6) {
|
||||
port_allocator_flags_ &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
|
||||
port_allocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
|
||||
} else if (webrtc::field_trial::FindFullName("WebRTC-IPv6Default")
|
||||
.find("Disabled") == 0) {
|
||||
port_allocator_flags_ &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
|
||||
port_allocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
|
||||
}
|
||||
|
||||
if (configuration.disable_ipv6_on_wifi) {
|
||||
port_allocator_flags_ &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6_ON_WIFI);
|
||||
port_allocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6_ON_WIFI);
|
||||
RTC_LOG(LS_INFO) << "IPv6 candidates on Wi-Fi are disabled.";
|
||||
}
|
||||
|
||||
if (configuration.tcp_candidate_policy == kTcpCandidatePolicyDisabled) {
|
||||
port_allocator_flags_ |= cricket::PORTALLOCATOR_DISABLE_TCP;
|
||||
port_allocator_flags |= cricket::PORTALLOCATOR_DISABLE_TCP;
|
||||
RTC_LOG(LS_INFO) << "TCP candidates are disabled.";
|
||||
}
|
||||
|
||||
if (configuration.candidate_network_policy ==
|
||||
kCandidateNetworkPolicyLowCost) {
|
||||
port_allocator_flags_ |= cricket::PORTALLOCATOR_DISABLE_COSTLY_NETWORKS;
|
||||
port_allocator_flags |= cricket::PORTALLOCATOR_DISABLE_COSTLY_NETWORKS;
|
||||
RTC_LOG(LS_INFO) << "Do not gather candidates on high-cost networks";
|
||||
}
|
||||
|
||||
if (configuration.disable_link_local_networks) {
|
||||
port_allocator_flags_ |= cricket::PORTALLOCATOR_DISABLE_LINK_LOCAL_NETWORKS;
|
||||
port_allocator_flags |= cricket::PORTALLOCATOR_DISABLE_LINK_LOCAL_NETWORKS;
|
||||
RTC_LOG(LS_INFO) << "Disable candidates on link-local network interfaces.";
|
||||
}
|
||||
|
||||
port_allocator_->set_flags(port_allocator_flags_);
|
||||
port_allocator_->set_flags(port_allocator_flags);
|
||||
// No step delay is used while allocating ports.
|
||||
port_allocator_->set_step_delay(cricket::kMinimumStepDelay);
|
||||
port_allocator_->set_candidate_filter(
|
||||
@ -5349,7 +5354,10 @@ bool PeerConnection::InitializePortAllocator_n(
|
||||
configuration.ice_candidate_pool_size, configuration.prune_turn_ports,
|
||||
configuration.turn_customizer,
|
||||
configuration.stun_candidate_keepalive_interval);
|
||||
return true;
|
||||
|
||||
InitializePortAllocatorResult res;
|
||||
res.enable_ipv6 = port_allocator_flags & cricket::PORTALLOCATOR_ENABLE_IPV6;
|
||||
return res;
|
||||
}
|
||||
|
||||
bool PeerConnection::ReconfigurePortAllocator_n(
|
||||
|
||||
@ -749,7 +749,10 @@ class PeerConnection : public PeerConnectionInternal,
|
||||
DataChannel* FindDataChannelBySid(int sid) const;
|
||||
|
||||
// Called when first configuring the port allocator.
|
||||
bool InitializePortAllocator_n(
|
||||
struct InitializePortAllocatorResult {
|
||||
bool enable_ipv6;
|
||||
};
|
||||
InitializePortAllocatorResult InitializePortAllocator_n(
|
||||
const cricket::ServerAddresses& stun_servers,
|
||||
const std::vector<cricket::RelayServerConfig>& turn_servers,
|
||||
const RTCConfiguration& configuration);
|
||||
@ -1095,14 +1098,18 @@ class PeerConnection : public PeerConnectionInternal,
|
||||
|
||||
// TODO(zstein): |async_resolver_factory_| can currently be nullptr if it
|
||||
// is not injected. It should be required once chromium supplies it.
|
||||
std::unique_ptr<AsyncResolverFactory> async_resolver_factory_;
|
||||
std::unique_ptr<cricket::PortAllocator> port_allocator_;
|
||||
std::unique_ptr<rtc::SSLCertificateVerifier> tls_cert_verifier_;
|
||||
int port_allocator_flags_ = 0;
|
||||
std::unique_ptr<AsyncResolverFactory> async_resolver_factory_
|
||||
RTC_GUARDED_BY(signaling_thread());
|
||||
std::unique_ptr<cricket::PortAllocator>
|
||||
port_allocator_; // TODO(bugs.webrtc.org/9987): Accessed on both
|
||||
// signaling and network thread.
|
||||
std::unique_ptr<rtc::SSLCertificateVerifier>
|
||||
tls_cert_verifier_; // TODO(bugs.webrtc.org/9987): Accessed on both
|
||||
// signaling and network thread.
|
||||
|
||||
// One PeerConnection has only one RTCP CNAME.
|
||||
// https://tools.ietf.org/html/draft-ietf-rtcweb-rtp-usage-26#section-4.9
|
||||
std::string rtcp_cname_;
|
||||
const std::string rtcp_cname_;
|
||||
|
||||
// Streams added via AddStream.
|
||||
rtc::scoped_refptr<StreamCollection> local_streams_;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user