Fix longstanding next-frame clone bug
authorDave Barach <[email protected]>
Fri, 18 Mar 2016 13:48:16 +0000 (09:48 -0400)
committerGerrit Code Review <[email protected]>
Fri, 18 Mar 2016 14:53:07 +0000 (14:53 +0000)
Do not propagate flags into cloned vlib_next_frame_t's.
vlib_next_frame_init(...) sets nf->frame_index to ~0. If it turns out
that the original flags include VLIB_FRAME_IS_ALLOCATED, the wheels
fall off. And so on.

Change-Id: I8de18653acfcc8eb20cee36f4eb5b9e82234f21b
Signed-off-by: Dave Barach <[email protected]>
vlib/vlib/threads.c

index 2fa5b4f..15eb959 100644 (file)
@@ -631,13 +631,10 @@ static clib_error_t * start_workers (vlib_main_t * vm)
               {
                 vlib_next_frame_t *nf = &nm_clone->next_frames[j];
                 u32 save_node_runtime_index;
-                u32 save_flags;
 
                 save_node_runtime_index = nf->node_runtime_index;
-                save_flags = nf->flags;
                 vlib_next_frame_init (nf);
                 nf->node_runtime_index = save_node_runtime_index;
-                nf->flags = save_flags;
               }
 
             /* fork the frame dispatch queue */
@@ -846,13 +843,10 @@ void vlib_worker_thread_node_runtime_update(void)
         {
           vlib_next_frame_t *nf = &nm_clone->next_frames[j];
           u32 save_node_runtime_index;
-          u32 save_flags;
 
           save_node_runtime_index = nf->node_runtime_index;
-          save_flags = nf->flags;
           vlib_next_frame_init (nf);
           nf->node_runtime_index = save_node_runtime_index;
-          nf->flags = save_flags;
         }
 
       old_nodes_clone = nm_clone->nodes;