From 4ad4b4115f27c9c0d4f235b5a341e2dfd8692288 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Fri, 25 Apr 2025 21:42:51 -0700 Subject: [PATCH] vcl: handle vcl as opposed to ldp reattaches Type: fix Change-Id: I01f8de268939a0f720db832ac533e5054aeef875 Signed-off-by: Florin Coras --- src/vcl/vcl_private.c | 4 ++-- src/vcl/vcl_private.h | 2 ++ src/vcl/vppcom.c | 7 ++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/vcl/vcl_private.c b/src/vcl/vcl_private.c index 7a9b60a1959..80fbd8b4c7e 100644 --- a/src/vcl/vcl_private.c +++ b/src/vcl/vcl_private.c @@ -49,7 +49,7 @@ vcl_mq_epoll_add_api_sock (vcl_worker_t *wrk) struct epoll_event e = { 0 }; int rv; - e.data.u32 = ~0; + e.data.u32 = VCL_EP_SAPIFD_EVT; rv = epoll_ctl (wrk->mqs_epfd, EPOLL_CTL_ADD, cs->fd, &e); if (rv != EEXIST && rv < 0) return -1; @@ -204,7 +204,7 @@ vcl_worker_detached_start_signal_mq (vcl_worker_t *wrk) struct epoll_event evt = {}; evt.events = EPOLLIN; - evt.data.u32 = wrk->detached_pipefds[0]; + evt.data.u32 = VCL_EP_PIPEFD_EVT; if (epoll_ctl (wrk->mqs_epfd, EPOLL_CTL_ADD, wrk->detached_pipefds[0], &evt) < 0) { diff --git a/src/vcl/vcl_private.h b/src/vcl/vcl_private.h index 72f0a8327f0..609653f20a4 100644 --- a/src/vcl/vcl_private.h +++ b/src/vcl/vcl_private.h @@ -32,6 +32,8 @@ #endif #define VPPCOM_DEBUG vcm->debug +#define VCL_EP_SAPIFD_EVT ((u32) ~0) +#define VCL_EP_PIPEFD_EVT ((u32) (~0 - 1)) extern __thread uword __vcl_worker_index; diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 82e3ec88e81..6f84178de79 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -3605,8 +3605,13 @@ vppcom_epoll_wait_eventfd (vcl_worker_t *wrk, struct epoll_event *events, for (i = 0; i < n_mq_evts; i++) { - if (PREDICT_FALSE (wrk->mq_events[i].data.u32 == ~0)) + if (PREDICT_FALSE (wrk->mq_events[i].data.u32 >= VCL_EP_PIPEFD_EVT)) { + if (wrk->mq_events[i].data.u32 == VCL_EP_PIPEFD_EVT) + { + vcl_api_retry_attach (wrk); + continue; + } /* api socket was closed */ vcl_api_handle_disconnect (wrk); continue; -- 2.16.6