X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvcl%2Fvppcom.c;fp=src%2Fvcl%2Fvppcom.c;h=360b65df9d289522e65b184a98c8b9fa9482b1eb;hb=7ff7274c6b23f53830fb52047161bd5cb988abe2;hp=8dab320afeddc574f11769effb4b30f6d536dc28;hpb=83e73709c33ca4188a04f355ccb13bde13d63271;p=vpp.git 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