From 7c90be5e2963e7852754e963cc92fca0b64c3bb7 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Mon, 26 Feb 2024 14:52:34 -0800 Subject: session: fix transport closed and disconnect race Type: fix Signed-off-by: Florin Coras Change-Id: Ie7ff4bac22e9dbb449610072b52d1ec4e46fe757 --- src/vnet/session/session_input.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/vnet/session') diff --git a/src/vnet/session/session_input.c b/src/vnet/session/session_input.c index 9153f07070d..b403f7ddc4c 100644 --- a/src/vnet/session/session_input.c +++ b/src/vnet/session/session_input.c @@ -162,8 +162,10 @@ app_worker_flush_events_inline (app_worker_t *app_wrk, u32 thread_index, { if (old_state >= SESSION_STATE_TRANSPORT_CLOSING) { - session_set_state (s, old_state); - app_worker_close_notify (app_wrk, s); + session_set_state (s, + clib_max (old_state, s->session_state)); + if (!(s->flags & SESSION_F_APP_CLOSED)) + app->cb_fns.session_disconnect_callback (s); } } break; @@ -188,8 +190,9 @@ app_worker_flush_events_inline (app_worker_t *app_wrk, u32 thread_index, } if (old_state >= SESSION_STATE_TRANSPORT_CLOSING) { - session_set_state (s, old_state); - app_worker_close_notify (app_wrk, s); + session_set_state (s, clib_max (old_state, s->session_state)); + if (!(s->flags & SESSION_F_APP_CLOSED)) + app->cb_fns.session_disconnect_callback (s); } break; case SESSION_CTRL_EVT_DISCONNECTED: -- cgit 1.2.3-korg