From: Florin Coras Date: Tue, 16 May 2023 20:05:28 +0000 (-0700) Subject: vcl: avoid skipping last event in epoll lt X-Git-Tag: v23.10-rc0~24 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=7ff7274c6b23f53830fb52047161bd5cb988abe2;p=vpp.git vcl: avoid skipping last event in epoll lt Type: fix Signed-off-by: Florin Coras Change-Id: Ic89256d16230593b61a7b3e29582444fb3f93e4d --- 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