On Sun, Jun 26, 2022 at 08:12:27PM +0300, Vitaliy Makkoveev wrote: > When pipex(4) session state is PIPEX_STATE_CLOSE_WAIT{,2} this means the > session is already reached time to live timeout, and the garbage > collector waits a little to before kill it. The meaning of `idle_time' > has been changed. > > Don't reset `idle_time' timeout for such sessions in packet processing > path, because they are already dead. Otherwise we could make session's > life time more then PIPEX_CLOSE_TIMEOUT.
OK bluhm@ > Index: sys/net/pipex.c > =================================================================== > RCS file: /cvs/src/sys/net/pipex.c,v > retrieving revision 1.138 > diff -u -p -r1.138 pipex.c > --- sys/net/pipex.c 26 Jun 2022 15:50:21 -0000 1.138 > +++ sys/net/pipex.c 26 Jun 2022 16:51:12 -0000 > @@ -779,7 +779,8 @@ pipex_ip_output(struct mbuf *m0, struct > if (is_idle == 0) { > mtx_enter(&pipex_list_mtx); > /* update expire time */ > - session->idle_time = 0; > + if (session->state == PIPEX_STATE_OPENED) > + session->idle_time = 0; > mtx_leave(&pipex_list_mtx); > } > } > @@ -1001,7 +1002,8 @@ pipex_ip_input(struct mbuf *m0, struct p > if (is_idle == 0) { > /* update expire time */ > mtx_enter(&pipex_list_mtx); > - session->idle_time = 0; > + if (session->state == PIPEX_STATE_OPENED) > + session->idle_time = 0; > mtx_leave(&pipex_list_mtx); > } > }