On Tue, May 20, 2014 at 04:03:20PM -0700, Jarno Rajahalme wrote: > > On May 8, 2014, at 4:50 PM, Ben Pfaff <b...@nicira.com> wrote: > > > Signed-off-by: Ben Pfaff <b...@nicira.com> > > --- > > lib/dpif-netdev.c | 163 > > +++++++++++++++++++++++++++-------------------------- > > 1 file changed, 82 insertions(+), 81 deletions(-) > > > > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c > > index 55712dd..b682876 100644 > > --- a/lib/dpif-netdev.c > > +++ b/lib/dpif-netdev.c > > @@ -32,6 +32,7 @@ > > > > (snip) > > > static void > > -port_unref(struct dp_netdev_port *port) > > +port_destroy__(struct dp_netdev_port *port) > > { > > - if (port && ovs_refcount_unref(&port->ref_cnt) == 1) { > > - int i; > > + int i; > > > > - netdev_close(port->netdev); > > - netdev_restore_flags(port->sf); > > + netdev_close(port->netdev); > > + netdev_restore_flags(port->sf); > > > > - for (i = 0; i < netdev_n_rxq(port->netdev); i++) { > > - netdev_rxq_close(port->rxq[i]); > > - } > > - free(port->type); > > - free(port); > > + for (i = 0; i < netdev_n_rxq(port->netdev); i++) { > > + netdev_rxq_close(port->rxq[i]); > > Running with the v1, I saw a core here. It appears that the > port->netdev is freed before the postponed port_destroy__ is > executed. Maybe the netdev deletion needs also be > ovsrcu_postponed()?
It's not obvious to me where the problem would be. Oh, I see it under the sandbox with valgrind. I'll investigate: ---------------------------------------------------------------------- You are running in a dummy Open vSwitch environment. You can use ovs-vsctl, ovs-ofctl, ovs-appctl, and other tools to work with the dummy switch. Log files, pidfiles, and the configuration database are in the "sandbox" subdirectory. Exit the shell to kill the running daemons. blp@sigsegv:~/ovs/tutorial$ ovs-vsctl add-br br0 blp@sigsegv:~/ovs/tutorial$ ovs-vsctl add-port br0 eth0 blp@sigsegv:~/ovs/tutorial$ ovs-vsctl del-port br0 eth0 blp@sigsegv:~/ovs/tutorial$ ==21030== Thread 7: ==21030== Invalid read of size 4 ==21030== at 0x80AEFE7: netdev_n_rxq (netdev.c:94) ==21030== by 0x80E2AEF: ovsrcu_call_postponed (ovs-rcu.c:249) ==21030== by 0x80E2DAD: ovsrcu_postpone_thread (ovs-rcu.c:265) ==21030== by 0x80E304D: ovsthread_wrapper (ovs-thread.c:302) ==21030== by 0x54F5C38: start_thread (pthread_create.c:304) ==21030== by 0x73AFD4D: clone (clone.S:130) ==21030== Address 0x782d560 is 16 bytes inside a block of size 292 free'd ==21030== at 0x525B50C: free (vg_replace_malloc.c:427) ==21030== by 0x80B0215: netdev_unref (netdev.c:496) ==21030== by 0x80961A8: port_destroy__ (dpif-netdev.c:820) ==21030== by 0x80E2AEF: ovsrcu_call_postponed (ovs-rcu.c:249) ==21030== by 0x80E2DAD: ovsrcu_postpone_thread (ovs-rcu.c:265) ==21030== by 0x80E304D: ovsthread_wrapper (ovs-thread.c:302) ==21030== by 0x54F5C38: start_thread (pthread_create.c:304) ==21030== by 0x73AFD4D: clone (clone.S:130) ==21030== blp@sigsegv:~/ovs/tutorial$ _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev