From cb2e79425448b4e20ad9acf9a35657932b6e93d9 Mon Sep 17 00:00:00 2001 From: Matus Fabian Date: Sun, 7 Sep 2025 09:15:44 -0400 Subject: [PATCH] hsa: proxy session reset improvement Handle session_reset_callback as session reset to properly propagate session state between active and passive open sides. Type: improvement Change-Id: I34eb80f5a4d7874e6cb0fdc072c6ee5894793b03 Signed-off-by: Matus Fabian --- src/plugins/hs_apps/proxy.c | 48 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/plugins/hs_apps/proxy.c b/src/plugins/hs_apps/proxy.c index c26f4698aa7..a2e4264a39e 100644 --- a/src/plugins/hs_apps/proxy.c +++ b/src/plugins/hs_apps/proxy.c @@ -312,6 +312,50 @@ proxy_try_close_session (session_t * s, int is_active_open) clib_spinlock_unlock_if_init (&pm->sessions_lock); } +static void +proxy_reset_session (session_t *s, int is_active_open) +{ + proxy_main_t *pm = &proxy_main; + proxy_session_side_ctx_t *sc; + proxy_session_t *ps; + proxy_worker_t *wrk; + + wrk = proxy_worker_get (s->thread_index); + sc = proxy_session_side_ctx_get (wrk, s->opaque); + + PROXY_DBG ("[%u] ps %u reset (is ao %u)", vlib_get_thread_index (), + sc->ps_index, is_active_open); + + clib_spinlock_lock_if_init (&pm->sessions_lock); + + ps = proxy_session_get (sc->ps_index); + + if (is_active_open) + { + proxy_session_close_ao (ps); + + if (!ps->po_disconnected) + { + ASSERT (ps->po.session_handle != SESSION_INVALID_HANDLE); + session_reset (session_get_from_handle (ps->po.session_handle)); + ps->po_disconnected = 1; + } + } + else + { + proxy_session_close_po (ps); + + if (!ps->ao_disconnected) + { + if (ps->ao.session_handle != SESSION_INVALID_HANDLE) + session_reset (session_get_from_handle (ps->ao.session_handle)); + ps->ao_disconnected = 1; + } + } + + clib_spinlock_unlock_if_init (&pm->sessions_lock); +} + static void proxy_try_side_ctx_cleanup (session_t *s) { @@ -488,7 +532,7 @@ proxy_disconnect_callback (session_t * s) static void proxy_reset_callback (session_t * s) { - proxy_try_close_session (s, 0 /* is_active_open */ ); + proxy_reset_session (s, 0 /* is_active_open */); } static int @@ -1083,7 +1127,7 @@ active_open_migrate_callback (session_t *s, session_handle_t new_sh) static void active_open_reset_callback (session_t * s) { - proxy_try_close_session (s, 1 /* is_active_open */ ); + proxy_reset_session (s, 1 /* is_active_open */); } static int -- 2.16.6