session: fix transport closed and disconnect race 98/40398/2
authorFlorin Coras <fcoras@cisco.com>
Mon, 26 Feb 2024 22:52:34 +0000 (14:52 -0800)
committerDave Barach <vpp@barachs.net>
Tue, 27 Feb 2024 18:49:06 +0000 (18:49 +0000)
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ie7ff4bac22e9dbb449610072b52d1ec4e46fe757

src/vnet/session/session_input.c

index 9153f07..b403f7d 100644 (file)
@@ -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: