Both issues catched by adding following line to cmap_get_impl(): ovs_assert(single_threaded() || !ovsrcu_is_quiescent());
I'd like to add it there permanently under the NDEBUG config, but it causes an issue that I don't know how to fix properly yet. The issue is that CMAPs with modifications could be used from the atexit handlers after execution of ovsrcu_exit() and returning from main. Could be catched on the unit test: 'ovs-vswitchd -- switch over to another ovs-vswitchd process' Log from the check-valgrind: ==26554== Process terminating with default action of signal 6 (SIGABRT) ==26554== at 0x699BE97: raise (raise.c:51) ==26554== by 0x699D800: abort (abort.c:79) ==26554== by 0x851FFA: ovs_abort_valist (util.c:363) ==26554== by 0x859B3D: vlog_abort_valist (vlog.c:1227) ==26554== by 0x859BC2: vlog_abort (vlog.c:1241) ==26554== by 0x851962: ovs_assert_failure (util.c:83) ==26554== by 0x78108A: cmap_get_impl (cmap.c:207) ==26554== by 0x78108A: cmap_find (cmap.c:368) ==26554== by 0x7BEAA3: netdev_lookup_class (netdev.c:204) ==26554== by 0x7BEAA3: netdev_unref (netdev.c:578) ==26554== by 0x84C69D: tnl_port_map_delete_ipdev (in /vswitchd/ovs-vswitchd) ==26554== by 0x81A519: rt_entry_delete__ (ovs-router.c:283) ==26554== by 0x81A519: ovs_router_flush (ovs-router.c:509) ==26554== by 0x79D06B: call_hooks (fatal-signal.c:254) ==26554== by 0x79D06B: fatal_signal_atexit_handler (fatal-signal.c:239) ==26554== by 0x69A0040: __run_exit_handlers (exit.c:108) ==26554== by 0x69A0139: exit (exit.c:139) ==26554== by 0x697EB9D: (below main) (libc-start.c:344) Ilya Maximets (2): ofproto-dpif-upcall: Don't purge ukeys while in a quiescent state. ofproto-dpif-upcall: Don't flush datapath flows in quiescent state. ofproto/ofproto-dpif-upcall.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) -- 2.17.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev