fix config routes enable/disable handling on down/up
[project/netifd.git] / device.c
index 1d842cf..0560a70 100644 (file)
--- a/device.c
+++ b/device.c
@@ -112,7 +112,6 @@ static void simple_device_free(struct device *dev)
 {
        if (dev->parent.dev)
                device_remove_user(&dev->parent);
-       device_cleanup(dev);
        free(dev);
 }
 
@@ -162,8 +161,6 @@ static void alias_device_free(struct device *dev)
 {
        struct alias_device *alias;
 
-       device_cleanup(dev);
-
        alias = container_of(dev, struct alias_device, dev);
        avl_delete(&aliases, &alias->avl);
        free(alias);
@@ -469,6 +466,9 @@ void device_add_user(struct device_user *dep, struct device *dev)
        if (dep->dev)
                device_remove_user(dep);
 
+       if (!dev)
+               return;
+
        dep->dev = dev;
        list_add_tail(&dep->list, &dev->users);
        if (dep->cb && dev->present) {
@@ -482,6 +482,8 @@ void
 device_free(struct device *dev)
 {
        __devlock++;
+       free(dev->config);
+       device_cleanup(dev);
        dev->type->free(dev);
        __devlock--;
 }