From 8919fec5acb14d176b992b71108f9a912d98161e Mon Sep 17 00:00:00 2001 From: wanghanlin Date: Thu, 18 Mar 2021 20:00:41 +0800 Subject: vcl: fix libc epoll pwait starved We call vls_epoll_wait with 0 timeout to process unhandled_evts_vector in ldp_epoll_pwait_eventfd. But vls_epoll_wait will then call vppcom_epoll_wait_eventfd to process events in event queue. If there are continuous events to be handled, then libc_epoll_pwait have no chance to be called. Type: fix Signed-off-by: wanghanlin Change-Id: Ia4f61d0d438a3475bfde9f6715805274671d4e75 --- src/vcl/ldp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/vcl/ldp.c') diff --git a/src/vcl/ldp.c b/src/vcl/ldp.c index a10d4d02fb4..64a4e7c77db 100644 --- a/src/vcl/ldp.c +++ b/src/vcl/ldp.c @@ -2516,7 +2516,8 @@ ldp_epoll_pwait_eventfd (int epfd, struct epoll_event *events, ldpw->mq_epfd_added = 1; } - rv = vls_epoll_wait (ep_vlsh, events, maxevents, 0); + /* Request to only drain unhandled to prevent libc_epoll_wait starved */ + rv = vls_epoll_wait (ep_vlsh, events, maxevents, -2); if (rv > 0) goto done; else if (PREDICT_FALSE (rv < 0)) -- cgit 1.2.3-korg