diff options
author | Florin Coras <fcoras@cisco.com> | 2023-05-16 13:05:28 -0700 |
---|---|---|
committer | Florin Coras <fcoras@cisco.com> | 2023-05-16 13:05:28 -0700 |
commit | 7ff7274c6b23f53830fb52047161bd5cb988abe2 (patch) | |
tree | 191e439e61262ad6c64f345d35e151c2eda93cb9 | |
parent | 83e73709c33ca4188a04f355ccb13bde13d63271 (diff) |
vcl: avoid skipping last event in epoll lt
Type: fix
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ic89256d16230593b61a7b3e29582444fb3f93e4d
-rw-r--r-- | src/vcl/vppcom.c | 13 |
1 files changed, 9 insertions, 4 deletions
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 |