vcl: handle vcl as opposed to ldp reattaches 01/42901/4
authorFlorin Coras <[email protected]>
Sat, 26 Apr 2025 04:42:51 +0000 (21:42 -0700)
committerDave Barach <[email protected]>
Sat, 26 Apr 2025 18:57:29 +0000 (18:57 +0000)
Type: fix

Change-Id: I01f8de268939a0f720db832ac533e5054aeef875
Signed-off-by: Florin Coras <[email protected]>
src/vcl/vcl_private.c
src/vcl/vcl_private.h
src/vcl/vppcom.c

index 7a9b60a..80fbd8b 100644 (file)
@@ -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)
     {
index 72f0a83..609653f 100644 (file)
@@ -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;
 
index 82e3ec8..6f84178 100644 (file)
@@ -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;