mirror of
https://git.FreeBSD.org/src.git
synced 2024-11-24 07:40:52 +00:00
tcp: stop timers and clean scoreboard in tcp_close()
Stop timers when in tcp_close() instead of doing that in tcp_discardcb(). A connection in CLOSED state shall not need any timers. Assert that no timer is rescheduled after that in tcp_timer_activate() and verfiy that this is also the expected state in tcp_discardcb(). PR: 276761 Reviewed By: glebius, tuexen, #transport Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D43792
This commit is contained in:
parent
a8e817cf5c
commit
62d47d73b7
@ -2383,10 +2383,9 @@ tcp_discardcb(struct tcpcb *tp)
|
||||
#endif
|
||||
|
||||
INP_WLOCK_ASSERT(inp);
|
||||
MPASS(!callout_active(&tp->t_callout));
|
||||
MPASS(TAILQ_EMPTY(&tp->snd_holes));
|
||||
|
||||
tcp_timer_stop(tp);
|
||||
|
||||
/* free the reassembly queue, if any */
|
||||
tcp_reass_flush(tp);
|
||||
|
||||
@ -2522,6 +2521,7 @@ tcp_close(struct tcpcb *tp)
|
||||
tcp_fastopen_decrement_counter(tp->t_tfo_pending);
|
||||
tp->t_tfo_pending = NULL;
|
||||
}
|
||||
tcp_timer_stop(tp);
|
||||
if (tp->t_fb->tfb_tcp_timer_stop_all != NULL)
|
||||
tp->t_fb->tfb_tcp_timer_stop_all(tp);
|
||||
in_pcbdrop(inp);
|
||||
|
@ -907,6 +907,7 @@ tcp_timer_activate(struct tcpcb *tp, tt_which which, u_int delta)
|
||||
#endif
|
||||
|
||||
INP_WLOCK_ASSERT(inp);
|
||||
MPASS(tp->t_state > TCPS_CLOSED);
|
||||
|
||||
if (delta > 0) {
|
||||
what = TT_STARTING;
|
||||
|
Loading…
Reference in New Issue
Block a user