tcp_close() schedules the reaper timeout to run immediately.

Does it need to run *immediately*?  Can it wait for one tick?

I'm trying to eliminate these zero-tick timeouts because they
rely on undocumented behavior and impede an optimization I want
to make in the timeout layer.

This is the one I'm hitting most often so I'll start here.

Index: tcp_subr.c
===================================================================
RCS file: /cvs/src/sys/netinet/tcp_subr.c,v
retrieving revision 1.174
diff -u -p -r1.174 tcp_subr.c
--- tcp_subr.c  4 Oct 2018 17:33:41 -0000       1.174
+++ tcp_subr.c  24 Jul 2020 18:19:00 -0000
@@ -518,7 +518,7 @@ tcp_close(struct tcpcb *tp)
 
        m_free(tp->t_template);
        /* Free tcpcb after all pending timers have been run. */
-       TCP_TIMER_ARM(tp, TCPT_REAPER, 0);
+       TCP_TIMER_ARM(tp, TCPT_REAPER, 1);
 
        inp->inp_ppcb = NULL;
        soisdisconnected(so);

Reply via email to