From 7ff7274c6b23f53830fb52047161bd5cb988abe2 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Tue, 16 May 2023 13:05:28 -0700 Subject: vcl: avoid skipping last event in epoll lt Type: fix Signed-off-by: Florin Coras Change-Id: Ic89256d16230593b61a7b3e29582444fb3f93e4d --- src/vcl/vppcom.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 8dab320afed..360b65df9d2 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -3367,7 +3367,7 @@ static void vcl_epoll_wait_handle_lt (vcl_worker_t *wrk, struct epoll_event *events, int maxevents, u32 *n_evts) { - u32 add_event = 0, next; + u32 add_event = 0, next, *to_remove = 0, *si; vcl_session_t *s; u64 evt_data; int rv; @@ -3415,12 +3415,17 @@ vcl_epoll_wait_handle_lt (vcl_worker_t *wrk, struct epoll_event *events, } else { - vcl_epoll_lt_del (wrk, s); - if (wrk->ep_lt_current == VCL_INVALID_SESSION_INDEX) - break; + vec_add1 (to_remove, s->session_index); } } while (next != wrk->ep_lt_current); + + vec_foreach (si, to_remove) + { + s = vcl_session_get (wrk, *si); + vcl_epoll_lt_del (wrk, s); + } + vec_free (to_remove); } int -- cgit 1.2.3-korg