looks good. Acked-by: Andy Zhou <[email protected]>
On Thu, Aug 1, 2013 at 2:29 PM, Ben Pfaff <[email protected]> wrote: > This API change is necessary for thread safety, to be added in an upcoming > commit. Otherwise, the client would not be able to safely use the returned > netdev because it could already have been destroyed. > > Signed-off-by: Ben Pfaff <[email protected]> > --- > lib/netdev-linux.c | 1 + > lib/netdev.c | 17 +++++++++++++---- > 2 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c > index 5bbaf63..c59f590 100644 > --- a/lib/netdev-linux.c > +++ b/lib/netdev-linux.c > @@ -541,6 +541,7 @@ netdev_linux_cache_cb(const struct > rtnetlink_link_change *change, > struct netdev *base_dev = netdev_from_name(change->ifname); > if (base_dev && > is_netdev_linux_class(netdev_get_class(base_dev))) { > netdev_linux_update(netdev_linux_cast(base_dev), change); > + netdev_close(base_dev); > } > } else { > struct shash device_shash; > diff --git a/lib/netdev.c b/lib/netdev.c > index 2561538..30c44a2 100644 > --- a/lib/netdev.c > +++ b/lib/netdev.c > @@ -1386,11 +1386,18 @@ netdev_get_class(const struct netdev *netdev) > > /* Returns the netdev with 'name' or NULL if there is none. > * > - * The caller must not free the returned value. */ > + * The caller must free the returned netdev with netdev_close(). */ > struct netdev * > netdev_from_name(const char *name) > { > - return shash_find_data(&netdev_shash, name); > + struct netdev *netdev; > + > + netdev = shash_find_data(&netdev_shash, name); > + if (netdev) { > + netdev_ref(netdev); > + } > + > + return netdev; > } > > /* Fills 'device_list' with devices that match 'netdev_class'. > @@ -1415,8 +1422,10 @@ netdev_get_devices(const struct netdev_class > *netdev_class, > const char * > netdev_get_type_from_name(const char *name) > { > - const struct netdev *dev = netdev_from_name(name); > - return dev ? netdev_get_type(dev) : NULL; > + struct netdev *dev = netdev_from_name(name); > + const char *type = dev ? netdev_get_type(dev) : NULL; > + netdev_close(dev); > + return type; > } > > void > -- > 1.7.10.4 > > _______________________________________________ > dev mailing list > [email protected] > http://openvswitch.org/mailman/listinfo/dev >
_______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
