vlib: fix adaptive mode flag unset on nodes reforking 92/31992/4
authorMaxime Peim <mpeim@cisco.com>
Thu, 15 Apr 2021 11:52:12 +0000 (13:52 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Wed, 5 May 2021 14:17:54 +0000 (14:17 +0000)
The adaptive mode flag is being unset on
nodes reforking. The flag is copied in order
to avoid this issue.

Old flags are copied for all nodes.

Type: fix
Signed-off-by: Maxime Peim <mpeim@cisco.com>
Change-Id: Ic29b20fc0e4454ce4b3765c478f55bf650b4572a

src/vlib/threads.c

index c65460e..7c796f5 100644 (file)
@@ -1101,6 +1101,7 @@ vlib_worker_thread_node_refork (void)
 
          /* keep previous node state */
          new_n_clone->state = old_n_clone->state;
+         new_n_clone->flags = old_n_clone->flags;
        }
       vec_add1 (nm_clone->nodes, new_n_clone);
       new_n_clone++;
@@ -1132,6 +1133,7 @@ vlib_worker_thread_node_refork (void)
     {
       rt = vlib_node_get_runtime (vm_clone, old_rt[j].node_index);
       rt->state = old_rt[j].state;
+      rt->flags = old_rt[j].flags;
       clib_memcpy_fast (rt->runtime_data, old_rt[j].runtime_data,
                        VLIB_NODE_RUNTIME_DATA_SIZE);
     }
@@ -1162,6 +1164,7 @@ vlib_worker_thread_node_refork (void)
     {
       rt = vlib_node_get_runtime (vm_clone, old_rt[j].node_index);
       rt->state = old_rt[j].state;
+      rt->flags = old_rt[j].flags;
       clib_memcpy_fast (rt->runtime_data, old_rt[j].runtime_data,
                        VLIB_NODE_RUNTIME_DATA_SIZE);
     }
@@ -1189,6 +1192,7 @@ vlib_worker_thread_node_refork (void)
     {
       rt = vlib_node_get_runtime (vm_clone, old_rt[j].node_index);
       rt->state = old_rt[j].state;
+      rt->flags = old_rt[j].flags;
       clib_memcpy_fast (rt->runtime_data, old_rt[j].runtime_data,
                        VLIB_NODE_RUNTIME_DATA_SIZE);
     }