[ovs-dev] [netdev 19/27] netdev: Make netdev_get_devices() take a reference to each netdev.
Ben Pfaff
blp at nicira.com
Wed Aug 7 17:09:17 UTC 2013
On Mon, Aug 05, 2013 at 01:00:59PM -0700, Andy Zhou wrote:
> On Thu, Aug 1, 2013 at 2:29 PM, Ben Pfaff <blp at nicira.com> wrote:
>
> > This API change is necessary for thread safety, to be added in an upcoming
> > commit. Otherwise, the client would not be able to actually use any of
> > the returned netdevs because they could already have been destroyed.
> >
> > Signed-off-by: Ben Pfaff <blp at nicira.com>
> > ---
> > lib/netdev-bsd.c | 32 ++++++++++----------------------
> > lib/netdev-linux.c | 4 ++++
> > lib/netdev.c | 5 +++--
> > 3 files changed, 17 insertions(+), 24 deletions(-)
> >
> > diff --git a/lib/netdev-bsd.c b/lib/netdev-bsd.c
> > index 6ff6b3e..d6a8631 100644
> > --- a/lib/netdev-bsd.c
> > +++ b/lib/netdev-bsd.c
> > @@ -255,6 +255,7 @@ netdev_bsd_cache_cb(const struct rtbsd_change *change,
> > dev->cache_valid = 0;
> > netdev_bsd_changed(dev);
> > }
> > + netdev_close(base_dev);
> > }
> > } else {
> > /*
> > @@ -271,6 +272,7 @@ netdev_bsd_cache_cb(const struct rtbsd_change *change,
> > dev = netdev_bsd_cast(netdev);
> > dev->cache_valid = 0;
> > netdev_bsd_changed(dev);
> > + netdev_close(dev);
> > }
> > shash_destroy(&device_shash);
> > }
> > @@ -1200,9 +1202,10 @@ netdev_bsd_get_in6(const struct netdev *netdev_,
> > struct in6_addr *in6)
> > }
> >
> > #if defined(__NetBSD__)
> > -static struct netdev *
> > -find_netdev_by_kernel_name(const char *kernel_name)
> > +static char *
> > +netdev_bsd_kernel_name_to_ovs_name(const char *kernel_name)
> > {
> > + char *ovs_name = NULL;
> > struct shash device_shash;
> > struct shash_node *node;
> >
> > @@ -1213,24 +1216,14 @@ find_netdev_by_kernel_name(const char *kernel_name)
> > struct netdev_bsd * const dev = netdev_bsd_cast(netdev);
> >
> > if (!strcmp(dev->kernel_name, kernel_name)) {
> > - shash_destroy(&device_shash);
> > - return &dev->up;
> > + free(ovs_name);
> > + ovs_name = xstrdup(netdev_get_name(&dev->up));
> >
> Would netdev_close to be called for &dev->up ?
netdev == &dev->up here. I guess the code could be more consistent
about using one or the other.
More information about the dev
mailing list