Fix crash when all acks in a feedback message arrive too late.

BUG=b/37279144

Review-Url: https://codereview.webrtc.org/2820353002
Cr-Commit-Position: refs/heads/master@{#17739}
This commit is contained in:
stefan 2017-04-18 06:45:12 -07:00 committed by Commit bot
parent 20acdfea79
commit 80fba25fc3
3 changed files with 21 additions and 3 deletions

View File

@ -172,11 +172,17 @@ DelayBasedBwe::DelayBasedBwe(RtcEventLog* event_log, const Clock* clock)
DelayBasedBwe::Result DelayBasedBwe::IncomingPacketFeedbackVector(
const std::vector<PacketFeedback>& packet_feedback_vector) {
RTC_DCHECK(network_thread_.CalledOnValidThread());
RTC_DCHECK(!packet_feedback_vector.empty());
std::vector<PacketFeedback> sorted_packet_feedback_vector;
SortPacketFeedbackVector(packet_feedback_vector,
&sorted_packet_feedback_vector);
// TOOD(holmer): An empty feedback vector here likely means that
// all acks were too late and that the send time history had
// timed out. We should reduce the rate when this occurs.
if (sorted_packet_feedback_vector.empty()) {
LOG(LS_WARNING) << "Very late feedback received.";
return DelayBasedBwe::Result();
}
if (!uma_recorded_) {
RTC_HISTOGRAM_ENUMERATION(kBweTypeHistogram,

View File

@ -25,6 +25,20 @@ const PacedPacketInfo kPacingInfo0(0, kNumProbesCluster0, 2000);
const PacedPacketInfo kPacingInfo1(1, kNumProbesCluster1, 4000);
} // namespace
TEST_F(DelayBasedBweTest, NoCrashEmptyFeedback) {
std::vector<PacketFeedback> packet_feedback_vector;
bitrate_estimator_->IncomingPacketFeedbackVector(packet_feedback_vector);
}
TEST_F(DelayBasedBweTest, NoCrashOnlyLostFeedback) {
std::vector<PacketFeedback> packet_feedback_vector;
packet_feedback_vector.push_back(
PacketFeedback(-1, -1, 0, 1500, PacedPacketInfo()));
packet_feedback_vector.push_back(
PacketFeedback(-1, -1, 1, 1500, PacedPacketInfo()));
bitrate_estimator_->IncomingPacketFeedbackVector(packet_feedback_vector);
}
TEST_F(DelayBasedBweTest, ProbeDetection) {
int64_t now_ms = clock_.TimeInMilliseconds();
uint16_t seq_num = 0;

View File

@ -240,8 +240,6 @@ void SendSideCongestionController::OnTransportFeedback(
transport_feedback_adapter_.OnTransportFeedback(feedback);
std::vector<PacketFeedback> feedback_vector =
transport_feedback_adapter_.GetTransportFeedbackVector();
if (feedback_vector.empty())
return;
DelayBasedBwe::Result result;
{
rtc::CritScope cs(&bwe_lock_);