vcl: close libc epfd on vls epfd close

Nginx recreates epfds. Make sure ldp tracks the event and recreates the
libc epfd or eventfd flavor of epoll pwait will not work.

Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I2994bead9494f0fbb85dd32767cecc1cf69ff6eb
This commit is contained in:
Florin Coras
2023-02-28 22:32:31 -08:00
committed by Dave Wallace
parent c2a1417c5a
commit 06defbc5de

View File

@ -331,16 +331,16 @@ close (int fd)
epfd = vls_attr (vlsh, VPPCOM_ATTR_GET_LIBC_EPFD, 0, 0); epfd = vls_attr (vlsh, VPPCOM_ATTR_GET_LIBC_EPFD, 0, 0);
if (epfd > 0) if (epfd > 0)
{ {
ldp_worker_ctx_t *ldpw = ldp_worker_get_current ();
u32 size = sizeof (epfd);
LDBG (0, "fd %d: calling libc_close: epfd %u", fd, epfd); LDBG (0, "fd %d: calling libc_close: epfd %u", fd, epfd);
rv = libc_close (epfd); libc_close (epfd);
if (rv < 0) ldpw->mq_epfd_added = 0;
{
u32 size = sizeof (epfd);
epfd = 0;
(void) vls_attr (vlsh, VPPCOM_ATTR_SET_LIBC_EPFD, &epfd, &size); epfd = 0;
} (void) vls_attr (vlsh, VPPCOM_ATTR_SET_LIBC_EPFD, &epfd, &size);
} }
else if (PREDICT_FALSE (epfd < 0)) else if (PREDICT_FALSE (epfd < 0))
{ {