fix duplicate bridge addif
[project/netifd.git] / device.c
index 0a33f67..428d001 100644 (file)
--- a/device.c
+++ b/device.c
@@ -308,12 +308,13 @@ int device_init(struct device *dev, const struct device_type *type, const char *
 }
 
 static struct device *
-device_create_default(const char *name)
+device_create_default(const char *name, bool external)
 {
        struct device *dev;
 
        D(DEVICE, "Create simple device '%s'\n", name);
        dev = calloc(1, sizeof(*dev));
+       dev->external = external;
        device_init(dev, &simple_device_type, name);
        dev->default_config = true;
        return dev;
@@ -332,7 +333,7 @@ device_alias_get(const char *name)
 }
 
 struct device *
-device_get(const char *name, bool create)
+device_get(const char *name, int create)
 {
        struct device *dev;
 
@@ -349,7 +350,7 @@ device_get(const char *name, bool create)
        if (!create)
                return NULL;
 
-       return device_create_default(name);
+       return device_create_default(name, create > 1);
 }
 
 static void
@@ -403,7 +404,7 @@ void device_add_user(struct device_user *dep, struct device *dev)
 static void
 __device_free_unused(struct device *dev)
 {
-       if (!list_empty(&dev->users) || dev->current_config || config_init)
+       if (!list_empty(&dev->users) || dev->current_config || __devlock)
                return;
 
        device_free(dev);
@@ -527,7 +528,7 @@ device_reset_old(void)
                if (dev->type != &simple_device_type)
                        continue;
 
-               ndev = device_create_default(dev->ifname);
+               ndev = device_create_default(dev->ifname, dev->external);
                device_replace(ndev, dev);
        }
 }