vlib: don't ASSERT(vm) in worker thread bootstrap 63/33263/2
authorDave Barach <dave@barachs.net>
Tue, 27 Jul 2021 13:27:07 +0000 (09:27 -0400)
committerFlorin Coras <florin.coras@gmail.com>
Tue, 27 Jul 2021 21:15:16 +0000 (21:15 +0000)
Otherwise, threads declared with .no_data_structure_clone=1 crash on
startup.

Type: fix

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I5dcb25d1b61330fc9eee5427b815fcfcb9bf2153

src/vlib/threads.c

index a33e70a..ad677dc 100644 (file)
@@ -407,14 +407,16 @@ vlib_worker_thread_bootstrap_fn (void *arg)
 {
   void *rv;
   vlib_worker_thread_t *w = arg;
+  vlib_main_t *vm = 0;
 
   w->lwp = syscall (SYS_gettid);
   w->thread_id = pthread_self ();
 
   __os_thread_index = w - vlib_worker_threads;
 
-  vlib_process_start_switch_stack (vlib_get_main_by_index (__os_thread_index),
-                                  0);
+  vm = vlib_global_main.vlib_mains[__os_thread_index];
+
+  vlib_process_start_switch_stack (vm, 0);
   rv = (void *) clib_calljmp
     ((uword (*)(uword)) w->thread_function,
      (uword) arg, w->thread_stack + VLIB_THREAD_STACK_SIZE);