Don't crash when sender info has been discarded by lower layers.
This happens when pc.close() is called.
As a stopgap measure, we return zeroes instead, leading to stats
being omitted.
Bug: chromium:807174
Change-Id: I36f342adcd038822afb75d8593de808591eb9c4b
Reviewed-on: https://webrtc-review.googlesource.com/46161
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21813}diff --git a/pc/rtcstatscollector.cc b/pc/rtcstatscollector.cc
index bc0c3cf..2e249e1 100644
--- a/pc/rtcstatscollector.cc
+++ b/pc/rtcstatscollector.cc
@@ -521,12 +521,19 @@
// to see from a sender whether it's connected or not.
// Related to https://crbug.com/8694 (using ssrc 0 to indicate "none")
if (sender->ssrc()) {
- voice_sender_info =
+ // When pc.close is called, sender info is discarded, so
+ // we generate zeroes instead. Bug: It should be retained.
+ // https://crbug.com/807174
+ auto sender_info =
track_media_info_map.GetVoiceSenderInfoBySsrc(sender->ssrc());
+ if (sender_info) {
+ voice_sender_info = sender_info;
+ } else {
+ RTC_LOG(LS_INFO)
+ << "RTCStatsCollector: No voice sender info for sender with ssrc "
+ << sender->ssrc();
+ }
}
-
- RTC_CHECK(voice_sender_info)
- << "No voice sender info for sender with ssrc " << sender->ssrc();
std::unique_ptr<RTCMediaStreamTrackStats> audio_track_stats =
ProduceMediaStreamTrackStatsFromVoiceSenderInfo(
timestamp_us, *track, *voice_sender_info, sender->AttachmentId());
@@ -539,12 +546,21 @@
cricket::VideoSenderInfo null_sender_info;
const cricket::VideoSenderInfo* video_sender_info = &null_sender_info;
// TODO(hta): Check on state not ssrc when state is available
- // Related to https://crbug.com/8694 (using ssrc 0 to indicate "none")
- if (sender->ssrc())
- video_sender_info =
+ // Related to https://bugs.webrtc.org/8694 (using ssrc 0 to indicate
+ // "none")
+ if (sender->ssrc()) {
+ // When pc.close is called, sender info is discarded, so
+ // we generate zeroes instead. Bug: It should be retained.
+ // https://crbug.com/807174
+ auto sender_info =
track_media_info_map.GetVideoSenderInfoBySsrc(sender->ssrc());
- RTC_CHECK(video_sender_info)
- << "No video sender info for sender with ssrc " << sender->ssrc();
+ if (sender_info) {
+ video_sender_info = sender_info;
+ } else {
+ RTC_LOG(LS_INFO) << "No video sender info for sender with ssrc "
+ << sender->ssrc();
+ }
+ }
std::unique_ptr<RTCMediaStreamTrackStats> video_track_stats =
ProduceMediaStreamTrackStatsFromVideoSenderInfo(
timestamp_us, *track, *video_sender_info, sender->AttachmentId());