hint = hint.left();
assert(ack_hint_out_.get(hint)==bins::EMPTY);
ack_hint_out_.set(hint);
- hint_out_.push_back(hint);
+ hint_out_.push_back(tintbin(NOW,hint));
return hint;
}
}
static const int MAX_REORDERING = 2; // the triple-ACK principle
if (max_ack_off>MAX_REORDERING) {
- while (max_ack_off && ack_in_.is_filled(data_out_.front().bin)) {
+ while (max_ack_off && (data_out_.front().bin==bin64_t::NONE
+ || ack_in_.is_filled(data_out_.front().bin)) ) {
data_out_.pop_front();
max_ack_off--;
}
}
tint timeout = NOW - rtt_avg_ - 4*std::max(dev_avg_,TINT_MSEC*50);
while (!data_out_.empty() && data_out_.front().time<timeout) {
- if (ack_in_.is_empty(data_out_.front().bin)) {
+ if (data_out_.front().bin!=bin64_t::NONE && ack_in_.is_empty(data_out_.front().bin)) {
cc_->OnAckRcvd(bin64_t::NONE);
data_out_cap_ = bin64_t::ALL;
dprintf("%s #%i Tdata %s\n",tintstr(),id,data_out_.front().bin.str());