vlib: stop worker threads on main loop exit 21/35721/6
authorVladislav Grishenko <themiron@yandex-team.ru>
Thu, 30 Dec 2021 14:08:42 +0000 (19:08 +0500)
committerDamjan Marion <dmarion@0xa5.net>
Tue, 7 Mar 2023 11:36:47 +0000 (11:36 +0000)
If not, worker threads may continue own loops after deinit and/or
thread0 exit with related crashes due no rpc capability, unmapped
shared memory, etc. Main loop exit handlers that uses barrier sync
will be happy too as long as recursive barrier sync is supported.

Type: feature
Signed-off-by: Vladislav Grishenko <themiron@yandex-team.ru>
Change-Id: I255a796b06936d96715683e3f062128060233dc6

src/vlib/main.c

index dc21a3f..95131da 100644 (file)
@@ -2010,7 +2010,9 @@ vlib_main (vlib_main_t * volatile vm, unformat_input_t * input)
   vlib_main_loop (vm);
 
 done:
+  /* Stop worker threads, barrier will not be released */
   vlib_worker_thread_barrier_sync (vm);
+
   /* Call all exit functions. */
   {
     clib_error_t *sub_error;
@@ -2018,7 +2020,6 @@ done:
     if (sub_error)
       clib_error_report (sub_error);
   }
-  vlib_worker_thread_barrier_release (vm);
 
   if (error)
     clib_error_report (error);