hsa: fifo detach cleanup 66/31366/3
authorFlorin Coras <fcoras@cisco.com>
Sat, 20 Feb 2021 19:22:07 +0000 (11:22 -0800)
committerDave Barach <openvpp@barachs.net>
Tue, 23 Feb 2021 21:11:21 +0000 (21:11 +0000)
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I907b2e560d6ecd748aa7c6d775c4f7122a39b4cb

src/plugins/hs_apps/sapi/vpp_echo.c
src/plugins/hs_apps/sapi/vpp_echo_bapi.c

index 816b7d4..d78bd12 100644 (file)
@@ -255,6 +255,30 @@ echo_update_count_on_session_close (echo_main_t * em, echo_session_t * s)
     echo_notify_event (em, ECHO_EVT_LAST_BYTE);
 }
 
+static void
+echo_session_detach_fifos (echo_session_t *s)
+{
+  echo_main_t *em = &echo_main;
+  fifo_segment_t *fs;
+
+  if (!s->rx_fifo)
+    return;
+
+  clib_spinlock_lock (&em->segment_handles_lock);
+
+  fs = fifo_segment_get_segment_if_valid (&em->segment_main,
+                                         s->rx_fifo->segment_index);
+
+  if (!fs)
+    goto done;
+
+  fifo_segment_free_client_fifo (fs, s->rx_fifo);
+  fifo_segment_free_client_fifo (fs, s->tx_fifo);
+
+done:
+  clib_spinlock_unlock (&em->segment_handles_lock);
+}
+
 static void
 echo_free_sessions (echo_main_t * em)
 {
@@ -273,6 +297,7 @@ echo_free_sessions (echo_main_t * em)
   {
     /* Free session */
     s = pool_elt_at_index (em->sessions, *session_index);
+    echo_session_detach_fifos (s);
     echo_session_handle_add_del (em, s->vpp_session_handle,
                                 SESSION_INVALID_INDEX);
     clib_memset (s, 0xfe, sizeof (*s));
index 915448a..0a0168b 100644 (file)
@@ -289,6 +289,8 @@ echo_attach_session (uword segment_handle, uword rxf_offset, uword txf_offset,
   fs = fifo_segment_get_segment (&em->segment_main, fs_index);
   s->rx_fifo = fifo_segment_alloc_fifo_w_offset (fs, rxf_offset);
   s->tx_fifo = fifo_segment_alloc_fifo_w_offset (fs, txf_offset);
+  s->rx_fifo->segment_index = fs_index;
+  s->tx_fifo->segment_index = fs_index;
   s->rx_fifo->shr->client_session_index = s->session_index;
   s->tx_fifo->shr->client_session_index = s->session_index;