session: mark first listener segment as protected 95/34595/2
authorFlorin Coras <fcoras@cisco.com>
Sat, 27 Nov 2021 18:30:03 +0000 (10:30 -0800)
committerDave Barach <openvpp@barachs.net>
Mon, 29 Nov 2021 17:50:16 +0000 (17:50 +0000)
Avoid constantly re-mapping a listener's first segment when all its
sessions are closed.

Type: improvement

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

src/vnet/session/application_worker.c

index be8a9e8..5437760 100644 (file)
@@ -184,6 +184,9 @@ app_worker_init_listener (app_worker_t * app_wrk, session_t * ls)
   if (!(sm = app_worker_alloc_segment_manager (app_wrk)))
     return SESSION_E_ALLOC;
 
+  /* Once the first segment is mapped, don't remove it until unlisten */
+  sm->first_is_protected = 1;
+
   /* Keep track of the segment manager for the listener or this worker */
   hash_set (app_wrk->listeners_table, listen_session_get_handle (ls),
            segment_manager_index (sm));
@@ -274,6 +277,7 @@ app_worker_stop_listen_session (app_worker_t * app_wrk, session_t * ls)
   sm = segment_manager_get (*sm_indexp);
   if (sm)
     {
+      sm->first_is_protected = 0;
       segment_manager_app_detach (sm);
       if (!segment_manager_has_fifos (sm))
        {