Chromium Code Reviews| Index: webrtc/api/peerconnection.cc |
| diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc |
| index b9cb83e724de78db6683bd0dc242afb6d80a928a..b775f511f06474fa4d05aa774291b7813b7bd5dc 100644 |
| --- a/webrtc/api/peerconnection.cc |
| +++ b/webrtc/api/peerconnection.cc |
| @@ -592,10 +592,12 @@ 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(), |
| + factory_->CreateTransportController(port_allocator_.get()))); |
| + |
| stats_.reset(new StatsCollector(this)); |
| // Initialize the WebRtcSession. It creates transport channels etc. |
| @@ -766,6 +768,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 +793,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 +1006,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 +1088,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 +1213,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); |
| } |
| @@ -1243,7 +1260,6 @@ void PeerConnection::Close() { |
| // Update stats here so that we have the most recent stats for tracks and |
| // streams before the channels are closed. |
| stats_->UpdateStats(kStatsOutputLevelStandard); |
| - |
|
Zhi Huang
2016/06/22 22:01:09
I will add it back before submitting.
|
| session_->Close(); |
| } |
| @@ -1386,17 +1402,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 +1441,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 +1475,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 +1490,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 +1516,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() |