session: fix local session tagging and cleanup 53/15153/3
authorFlorin Coras <fcoras@cisco.com>
Fri, 5 Oct 2018 02:03:05 +0000 (19:03 -0700)
committerDave Barach <openvpp@barachs.net>
Fri, 5 Oct 2018 11:40:58 +0000 (11:40 +0000)
Change-Id: I0d42a0c71fea7dd669fb1fe5ded7e6e944245c7d
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/svm/svm_fifo.c
src/svm/svm_fifo.h
src/svm/svm_fifo_segment.c
src/vnet/session/application.c
src/vnet/session/segment_manager.c
src/vnet/session/session_node.c

index ac368dd..4eae0a1 100644 (file)
@@ -212,6 +212,7 @@ svm_fifo_create (u32 data_size_in_bytes)
   memset (f, 0, sizeof (*f));
   f->nitems = data_size_in_bytes;
   f->ooos_list_head = OOO_SEGMENT_INVALID_INDEX;
+  f->ct_session_index = SVM_FIFO_INVALID_SESSION_INDEX;
   f->refcnt = 1;
   return (f);
 }
index 1ac5b63..d7852a7 100644 (file)
@@ -36,8 +36,9 @@ typedef struct
 format_function_t format_ooo_segment;
 format_function_t format_ooo_list;
 
-#define SVM_FIFO_TRACE (0)
-#define OOO_SEGMENT_INVALID_INDEX ((u32)~0)
+#define SVM_FIFO_TRACE                         (0)
+#define OOO_SEGMENT_INVALID_INDEX      ((u32)~0)
+#define SVM_FIFO_INVALID_SESSION_INDEX         ((u32)~0)
 
 typedef struct
 {
@@ -60,6 +61,7 @@ typedef struct _svm_fifo
   u8 master_thread_index;
   u8 client_thread_index;
   u32 segment_manager;
+  u32 ct_session_index;                /**< Local session index for vpp */
     CLIB_CACHE_LINE_ALIGN_MARK (end_shared);
   u32 head;
   volatile u32 want_tx_evt;    /**< producer wants nudge */
index a3181ee..dcfc0df 100644 (file)
@@ -390,6 +390,7 @@ svm_fifo_segment_alloc_fifo (svm_fifo_segment_private_t * s,
          memset (f, 0, sizeof (*f));
          f->nitems = data_size_in_bytes;
          f->ooos_list_head = OOO_SEGMENT_INVALID_INDEX;
+         f->ct_session_index = SVM_FIFO_INVALID_SESSION_INDEX;
          f->refcnt = 1;
          f->freelist_index = freelist_index;
          goto found;
index 6190966..fad3e1c 100644 (file)
@@ -1626,10 +1626,8 @@ application_local_session_connect (app_worker_t * client_wrk,
       segment_manager_segment_reader_unlock (sm);
       goto failed;
     }
-  ls->server_rx_fifo->master_session_index = ls->session_index;
-  ls->server_tx_fifo->master_session_index = ls->session_index;
-  ls->server_rx_fifo->master_thread_index = ~0;
-  ls->server_tx_fifo->master_thread_index = ~0;
+  ls->server_rx_fifo->ct_session_index = ls->session_index;
+  ls->server_tx_fifo->ct_session_index = ls->session_index;
   ls->svm_segment_index = seg_index;
   ls->listener_index = ll->session_index;
   ls->client_wrk_index = client_wrk->wrk_index;
index bf62040..8dd7292 100644 (file)
@@ -366,11 +366,11 @@ segment_manager_del_sessions (segment_manager_t * sm)
      */
     while (fifo)
       {
-       if (fifo->master_thread_index == 255)
+       if (fifo->ct_session_index != SVM_FIFO_INVALID_SESSION_INDEX)
          {
            svm_fifo_t *next = fifo->next;
            application_local_session_disconnect_w_index (sm->app_wrk_index,
-                                                         fifo->master_session_index);
+                                                         fifo->ct_session_index);
            fifo = next;
            continue;
          }
index 9a954bb..281622b 100644 (file)
@@ -835,7 +835,7 @@ skip_dequeue:
          s = session_event_get_session (e, thread_index);
          if (PREDICT_FALSE (!s))
            {
-             clib_warning ("It's dead, Jim!");
+             clib_warning ("session was freed!");
              continue;
            }