Acked-by: Jarno Rajahalme <jrajaha...@nicira.com> On Sep 16, 2013, at 2:59 PM, Ben Pfaff <b...@nicira.com> wrote:
> valgrind reported: > > Invalid read of size 4 > at 0x806ADC1: odp_port_to_ofport (hmap.h:267) > by 0x8077C05: xlate_receive (ofproto-dpif-xlate.c:523) > by 0x8073994: handle_miss_upcalls (ofproto-dpif-upcall.c:642) > by 0x80741AA: udpif_miss_handler (ofproto-dpif-upcall.c:412) > by 0x56FCC38: start_thread (pthread_create.c:304) > by 0x735378D: clone (clone.S:130) > Address 0x786c084 is 4 bytes inside a block of size 16 free'd > at 0x4D8350C: free (vg_replace_malloc.c:427) > by 0x8065EDA: close_dpif_backer (ofproto-dpif.c:1094) > > The problem is that close_dpif_backer() destroys odp_to_ofport_map and the > associated mutex before it calls udpif_destroy() to stop the forwarding > threads. This gives the forwarding threads a window in which to try to > use odp_to_ofport_map. > > This commit moves the udpif_destroy() call much earlier, solving the > problem. (The call to udpif_destroy() must follow the call to > drop_key_clear() because drop_key_clear() uses the udpif.) > > Signed-off-by: Ben Pfaff <b...@nicira.com> > --- > ofproto/ofproto-dpif.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c > index b91b3df..b41c179 100644 > --- a/ofproto/ofproto-dpif.c > +++ b/ofproto/ofproto-dpif.c > @@ -1090,13 +1090,14 @@ close_dpif_backer(struct dpif_backer *backer) > drop_key_clear(backer); > hmap_destroy(&backer->drop_keys); > > + udpif_destroy(backer->udpif); > + > simap_destroy(&backer->tnl_backers); > ovs_rwlock_destroy(&backer->odp_to_ofport_lock); > hmap_destroy(&backer->odp_to_ofport_map); > node = shash_find(&all_dpif_backers, backer->type); > free(backer->type); > shash_delete(&all_dpif_backers, node); > - udpif_destroy(backer->udpif); > dpif_close(backer->dpif); > > ovs_assert(hmap_is_empty(&backer->subfacets)); > -- > 1.7.10.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev