From: Damjan Marion Date: Thu, 27 Jul 2017 08:07:50 +0000 (-0400) Subject: Fix interface reuse when running multithreaded X-Git-Tag: v17.10-rc1~309 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=c418e4ac7cf36bd64f3130c258d5f1897c245f2b;p=vpp.git Fix interface reuse when running multithreaded Node function pointer was not set on all node runtimes causing crash if new interface is different type. Change-Id: I4661fe883befc6cd3fc6dfc14fd44f6fa5faf27c Signed-off-by: Damjan Marion --- diff --git a/src/vnet/interface.c b/src/vnet/interface.c index 7c0272b458d..dad1f315620 100644 --- a/src/vnet/interface.c +++ b/src/vnet/interface.c @@ -785,14 +785,22 @@ vnet_register_interface (vnet_main_t * vnm, node = vlib_get_node (vm, hw->output_node_index); node->function = vnet_interface_output_node_multiarch_select (); node->format_trace = format_vnet_interface_output_trace; - nrt = vlib_node_get_runtime (vm, hw->output_node_index); - nrt->function = node->function; + /* *INDENT-OFF* */ + foreach_vlib_main ({ + nrt = vlib_node_get_runtime (this_vlib_main, hw->output_node_index); + nrt->function = node->function; + }); + /* *INDENT-ON* */ node = vlib_get_node (vm, hw->tx_node_index); node->function = dev_class->tx_function; node->format_trace = dev_class->format_tx_trace; - nrt = vlib_node_get_runtime (vm, hw->tx_node_index); - nrt->function = node->function; + /* *INDENT-OFF* */ + foreach_vlib_main ({ + nrt = vlib_node_get_runtime (this_vlib_main, hw->tx_node_index); + nrt->function = node->function; + }); + /* *INDENT-ON* */ _vec_len (im->deleted_hw_interface_nodes) -= 1; }