return dev;
}
+static void
+device_delete(struct device *dev)
+{
+ if (!dev->avl.key)
+ return;
+
+ avl_delete(&devices, &dev->avl);
+ dev->avl.key = NULL;
+}
+
void device_cleanup(struct device *dev)
{
struct device_user *dep, *tmp;
dep->cb(dep, DEV_EVENT_REMOVE);
}
- if (dev->avl.key)
- avl_delete(&devices, &dev->avl);
+ device_delete(dev);
}
void device_set_present(struct device *dev, bool state)
change = device_check_config(odev, config);
switch (change) {
case DEV_CONFIG_APPLIED:
+ D(DEVICE, "Device '%s': config applied\n", odev->ifname);
free(odev->config);
odev->config = config;
if (odev->present) {
device_set_present(odev, false);
device_set_present(odev, true);
}
- /* fall through */
+ free(config);
+ return odev;
case DEV_CONFIG_NO_CHANGE:
+ D(DEVICE, "Device '%s': no configuration change\n", odev->ifname);
free(config);
return odev;
case DEV_CONFIG_RECREATE:
+ D(DEVICE, "Device '%s': recreate device\n", odev->ifname);
+ device_delete(odev);
break;
}
}