vcl: cleanup listener accept fifo 52/20552/3
authorFlorin Coras <fcoras@cisco.com>
Mon, 8 Jul 2019 20:00:00 +0000 (13:00 -0700)
committerFlorin Coras <fcoras@cisco.com>
Mon, 8 Jul 2019 20:15:24 +0000 (13:15 -0700)
Type: fix

Change-Id: Ic470d429f4bf1924185f720d66efe06f4727bcbd
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vcl/vppcom.c

index 9a351d8..3d08d39 100644 (file)
@@ -822,13 +822,27 @@ static int
 vppcom_session_unbind (u32 session_handle)
 {
   vcl_worker_t *wrk = vcl_worker_get_current ();
+  session_accepted_msg_t *accepted_msg;
   vcl_session_t *session = 0;
+  vcl_session_msg_t *evt;
   u64 vpp_handle;
 
   session = vcl_session_get_w_handle (wrk, session_handle);
   if (!session)
     return VPPCOM_EBADFD;
 
+  /* Flush pending accept events, if any */
+  while (clib_fifo_elts (session->accept_evts_fifo))
+    {
+      clib_fifo_sub2 (session->accept_evts_fifo, evt);
+      accepted_msg = &evt->accepted_msg;
+      vcl_session_table_del_vpp_handle (wrk, accepted_msg->handle);
+      vcl_send_session_accepted_reply (session->vpp_evt_q,
+                                      accepted_msg->context,
+                                      session->vpp_handle, -1);
+    }
+  clib_fifo_free (session->accept_evts_fifo);
+
   vpp_handle = session->vpp_handle;
   session->vpp_handle = ~0;
   session->session_state = STATE_DISCONNECT;