On Sat, Jul 14, 2012 at 1:54 AM, Reese Faucette <re...@myri.com> wrote: > Hi, freebsd-net- > > I don't have a testcase for this at the moment, but there's a test > in tcp_do_segment that looks backwards to me... > > http://svnweb.freebsd.org/base/release/9.0.0/sys/netinet/tcp_input.c?view=markup > > line 2398 - > if (!tcp_timer_active(tp, TT_REXMT) || > th->th_ack != tp->snd_una) > tp->t_dupacks = 0; > > says "If we get a DUP ack and the retransmit timer is NOT > fired, then ignore it and reset DUP ACK count." > > Isn't that exactly backwards? I could see ignoring the DUP ACK if we > know the retransmit timer HAS fired, and we don't want to interfere with > its retransmission efforts. The way the code is written now, as far as > I can see, completely defeats retransmission based on DUP acks. I > accidentally ran across this by breaking the timer, so that the > retransmit timer never fires, and my streams get stuck, even with plenty of > DUP ACKs. > > Am I missing something, or should that "!" go ?
!tcp_timer_active() means that the connection's retransmit timer is not _set_ yet (please note, it is _not_ "has fired"). As far as I understand this code, it in turn means that this connection doesn't have any segments that were sent but not yet ACKed. Best Regards, sephe -- Tomorrow Will Never Die _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"