From b704623f1125be1f9f3840e27da55f93a317b7e9 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Fri, 16 May 2025 00:08:42 -0400 Subject: [PATCH] vcl: fix detach of sessions without fifos Make sure we only try to cleanup segments for sessions that have not yet been disconnected. Type: fix Change-Id: If8a8afcc9fdc1843918df376fcc442fc8c4fdbad Signed-off-by: Florin Coras --- src/vcl/vcl_private.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/vcl/vcl_private.c b/src/vcl/vcl_private.c index 80fbd8b4c7e..33ce7eb6c7a 100644 --- a/src/vcl/vcl_private.c +++ b/src/vcl/vcl_private.c @@ -253,18 +253,28 @@ vcl_worker_detach_sessions (vcl_worker_t *wrk) s->flags |= VCL_SESSION_F_LISTEN_NO_MQ; continue; } - if ((s->flags & VCL_SESSION_F_IS_VEP) || - s->session_state == VCL_STATE_CLOSED) + if ((s->flags & VCL_SESSION_F_IS_VEP)) continue; - hash_set (seg_indices_map, s->tx_fifo->segment_index, 1); + /* App closed, vpp detached, free session */ + if (s->session_state == VCL_STATE_CLOSED) + { + vcl_session_free (wrk, s); + continue; + } + + /* In other states expect close from app */ + if (s->session_state == VCL_STATE_READY) + { + hash_set (seg_indices_map, s->tx_fifo->segment_index, 1); + vec_add2 (wrk->unhandled_evts_vector, e, 1); + e->event_type = SESSION_CTRL_EVT_DISCONNECTED; + e->session_index = s->session_index; + e->postponed = 1; + } s->session_state = VCL_STATE_DETACHED; s->flags |= VCL_SESSION_F_APP_CLOSING; - vec_add2 (wrk->unhandled_evts_vector, e, 1); - e->event_type = SESSION_CTRL_EVT_DISCONNECTED; - e->session_index = s->session_index; - e->postponed = 1; } hash_foreach (seg_index, val, seg_indices_map, -- 2.16.6