ofproto-dpif-upcall: Avoid double-delete of ukeys.
authorBen Pfaff <blp@ovn.org>
Wed, 6 Jan 2016 23:44:39 +0000 (15:44 -0800)
committerBen Pfaff <blp@ovn.org>
Wed, 6 Jan 2016 23:46:35 +0000 (15:46 -0800)
commit83b03fe05e7a6734b2096dab86937294769987c6
tree5056bc2bed047fb6b1c91406e2721813d2138b16
parente4f47025ee6e39520357225b2f7269191da1a4f1
ofproto-dpif-upcall: Avoid double-delete of ukeys.

revalidate_sweep__() has two cases where it calls ukey_delete() to
remove a ukey from the umap via cmap_remove().  The first case is a direct
call to ukey_delete(), when !flow_exists.  The second case is an indirect
call via push_ukey_ops(), when result != UKEY_KEEP.  If both of these
conditions are simultaneously true, however, the code would call
ukey_delete() twice, causing an assertion failure in the second call.  This
commit fixes the problem by eliminating one of the calls.

The version tested by Ben Warren differs from this version, see:
    http://openvswitch.org/pipermail/dev/2016-January/064117.html

Reported-by: Keith Holleman <keith.holleman@gmail.com>
Reported-at: http://openvswitch.org/pipermail/discuss/2015-December/019772.html
CC: Joe Stringer <joe@ovn.org>
VMware-BZ: #1579057
Signed-off-by: Ben Pfaff <blp@ovn.org>
Tested-by: Ben Warren <ben@skyportsystems.com>
ofproto/ofproto-dpif-upcall.c