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

Reply via email to