fix out of order oscilation causing constant congestion events
This commit is contained in:
@@ -168,13 +168,15 @@ void FlowOnly::onAck(std::vector<SeqIDType> seqs) {
|
|||||||
});
|
});
|
||||||
if (it != _in_flight.end() && !it->ignore) {
|
if (it != _in_flight.end() && !it->ignore) {
|
||||||
// find first non ignore, it should be the expected
|
// find first non ignore, it should be the expected
|
||||||
auto first_it = std::find_if_not(_in_flight.cbegin(), _in_flight.cend(), [](const auto& v) -> bool { return v.ignore; });
|
auto first_it = std::find_if_not(_in_flight.begin(), _in_flight.end(), [](const auto& v) -> bool { return v.ignore; });
|
||||||
|
|
||||||
if (first_it != _in_flight.cend() && it != first_it && !it->ignore) {
|
if (first_it != _in_flight.cend() && it != first_it && !first_it->ignore) {
|
||||||
// not next expected seq -> skip detected
|
// not next expected seq -> skip detected
|
||||||
|
|
||||||
_consecutive_events++;
|
_consecutive_events++;
|
||||||
it->ignore = true; // only handle once
|
// only handle once
|
||||||
|
it->ignore = true;
|
||||||
|
first_it->ignore = true;
|
||||||
|
|
||||||
updateCongestion();
|
updateCongestion();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user