Index: webrtc/api/peerconnection.cc |
diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc |
index b9cb83e724de78db6683bd0dc242afb6d80a928a..8b6b17b4601a2c7ae34df87fab1df2a2a979192d 100644 |
--- a/webrtc/api/peerconnection.cc |
+++ b/webrtc/api/peerconnection.cc |
@@ -592,10 +592,13 @@ bool PeerConnection::Initialize( |
media_controller_.reset( |
factory_->CreateMediaController(configuration.media_config)); |
- session_.reset( |
- new WebRtcSession(media_controller_.get(), factory_->network_thread(), |
- factory_->worker_thread(), factory_->signaling_thread(), |
- port_allocator_.get())); |
+ session_.reset(new WebRtcSession( |
+ media_controller_.get(), factory_->network_thread(), |
+ factory_->worker_thread(), factory_->signaling_thread(), |
+ port_allocator_.get(), |
+ std::unique_ptr<cricket::TransportController>( |
+ factory_->CreateTransportController(port_allocator_.get())))); |
+ |
stats_.reset(new StatsCollector(this)); |
// Initialize the WebRtcSession. It creates transport channels etc. |
@@ -766,6 +769,9 @@ bool PeerConnection::RemoveTrack(RtpSenderInterface* sender) { |
rtc::scoped_refptr<DtmfSenderInterface> PeerConnection::CreateDtmfSender( |
AudioTrackInterface* track) { |
TRACE_EVENT0("webrtc", "PeerConnection::CreateDtmfSender"); |
+ if (IsClosed()) { |
+ return nullptr; |
+ } |
if (!track) { |
LOG(LS_ERROR) << "CreateDtmfSender - track is NULL."; |
return NULL; |
@@ -788,6 +794,9 @@ rtc::scoped_refptr<RtpSenderInterface> PeerConnection::CreateSender( |
const std::string& kind, |
const std::string& stream_id) { |
TRACE_EVENT0("webrtc", "PeerConnection::CreateSender"); |
+ if (IsClosed()) { |
+ return nullptr; |
+ } |
rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender; |
if (kind == MediaStreamTrackInterface::kAudioKind) { |
new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create( |
@@ -998,6 +1007,9 @@ void PeerConnection::SetLocalDescription( |
SetSessionDescriptionObserver* observer, |
SessionDescriptionInterface* desc) { |
TRACE_EVENT0("webrtc", "PeerConnection::SetLocalDescription"); |
+ if (IsClosed()) { |
+ return; |
+ } |
if (!VERIFY(observer != nullptr)) { |
LOG(LS_ERROR) << "SetLocalDescription - observer is NULL."; |
return; |
@@ -1077,6 +1089,9 @@ void PeerConnection::SetRemoteDescription( |
SetSessionDescriptionObserver* observer, |
SessionDescriptionInterface* desc) { |
TRACE_EVENT0("webrtc", "PeerConnection::SetRemoteDescription"); |
+ if (IsClosed()) { |
+ return; |
+ } |
if (!VERIFY(observer != nullptr)) { |
LOG(LS_ERROR) << "SetRemoteDescription - observer is NULL."; |
return; |
@@ -1199,6 +1214,9 @@ bool PeerConnection::SetConfiguration(const RTCConfiguration& configuration) { |
bool PeerConnection::AddIceCandidate( |
const IceCandidateInterface* ice_candidate) { |
TRACE_EVENT0("webrtc", "PeerConnection::AddIceCandidate"); |
+ if (IsClosed()) { |
+ return false; |
+ } |
return session_->ProcessIceMessage(ice_candidate); |
} |
@@ -1386,17 +1404,26 @@ void PeerConnection::OnIceGatheringChange( |
void PeerConnection::OnIceCandidate(const IceCandidateInterface* candidate) { |
RTC_DCHECK(signaling_thread()->IsCurrent()); |
+ if (IsClosed()) { |
+ return; |
+ } |
observer_->OnIceCandidate(candidate); |
} |
void PeerConnection::OnIceCandidatesRemoved( |
const std::vector<cricket::Candidate>& candidates) { |
RTC_DCHECK(signaling_thread()->IsCurrent()); |
+ if (IsClosed()) { |
+ return; |
+ } |
observer_->OnIceCandidatesRemoved(candidates); |
} |
void PeerConnection::OnIceConnectionReceivingChange(bool receiving) { |
RTC_DCHECK(signaling_thread()->IsCurrent()); |
+ if (IsClosed()) { |
+ return; |
+ } |
observer_->OnIceConnectionReceivingChange(receiving); |
} |
@@ -1416,6 +1443,9 @@ void PeerConnection::ChangeSignalingState( |
void PeerConnection::OnAudioTrackAdded(AudioTrackInterface* track, |
MediaStreamInterface* stream) { |
+ if (IsClosed()) { |
+ return; |
+ } |
auto sender = FindSenderForTrack(track); |
if (sender != senders_.end()) { |
// We already have a sender for this track, so just change the stream_id |
@@ -1447,6 +1477,9 @@ void PeerConnection::OnAudioTrackAdded(AudioTrackInterface* track, |
// indefinitely, when we have unified plan SDP. |
void PeerConnection::OnAudioTrackRemoved(AudioTrackInterface* track, |
MediaStreamInterface* stream) { |
+ if (IsClosed()) { |
+ return; |
+ } |
auto sender = FindSenderForTrack(track); |
if (sender == senders_.end()) { |
LOG(LS_WARNING) << "RtpSender for track with id " << track->id() |
@@ -1459,6 +1492,9 @@ void PeerConnection::OnAudioTrackRemoved(AudioTrackInterface* track, |
void PeerConnection::OnVideoTrackAdded(VideoTrackInterface* track, |
MediaStreamInterface* stream) { |
+ if (IsClosed()) { |
+ return; |
+ } |
auto sender = FindSenderForTrack(track); |
if (sender != senders_.end()) { |
// We already have a sender for this track, so just change the stream_id |
@@ -1482,6 +1518,9 @@ void PeerConnection::OnVideoTrackAdded(VideoTrackInterface* track, |
void PeerConnection::OnVideoTrackRemoved(VideoTrackInterface* track, |
MediaStreamInterface* stream) { |
+ if (IsClosed()) { |
+ return; |
+ } |
auto sender = FindSenderForTrack(track); |
if (sender == senders_.end()) { |
LOG(LS_WARNING) << "RtpSender for track with id " << track->id() |