On Tue, May 08, 2018 at 03:04:59PM +0200, Martin Pieuchot wrote:
> On 08/05/18(Tue) 14:32, Alexander Bluhm wrote:
> > @@ -176,12 +176,12 @@ do { \
> >     struct ifnet *ifp = NULL; \
> >     if (m && (m->m_flags & M_PKTHDR)) \
> >             ifp = if_get(m->m_pkthdr.ph_ifidx); \
> > -   if ((tp)->t_flags & TF_DELACK || \
> > +   if (TCP_TIMER_ISARMED(tp, TCPT_DELACK) || \
> >         (tcp_ack_on_push && (tiflags) & TH_PUSH) || \
> >         (ifp && (ifp->if_flags & IFF_LOOPBACK))) \
> >             tp->t_flags |= TF_ACKNOW; \
> >     else \
> > -           TCP_SET_DELACK(tp); \
> > +           TCP_TIMER_ARM_MSEC(tp, TCPT_DELACK, tcp_delack_msecs); \
> 
> Here you introduce a behavior change. TCP_SET_DELACK() would not call
> timeout_add_msec() if TF_DELACK was set, you're now calling it
> unconditionally.  Is it safe?  Or should you add a TCP_TIMER_ISARMED()
> check?

The TCP_TIMER_ARM_MSEC() is in the else block.  The if condition
is (TCP_TIMER_ISARMED() || ...), so the timer is only started if
it was not set before.

bluhm

Reply via email to