X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=device.c;h=e206a765669101d19f473fa8cdb927709df0e2a8;hp=c02335c1b906c653331d72af5c8220215bcfae97;hb=5f739f10e9d7af0eb412102356434f905ed8f467;hpb=03f9afd81fcb9943648f5398a2bda5e7d90ca4a7;ds=sidebyside diff --git a/device.c b/device.c index c02335c..e206a76 100644 --- a/device.c +++ b/device.c @@ -278,15 +278,23 @@ void device_remove_user(struct device_user *dep) dep->dev = NULL; } +static void +__device_free_unused(struct device *dev) +{ + if (!list_empty(&dev->users)) + return; + + device_free(dev); +} + void -device_free_all(void) +device_free_unused(struct device *dev) { - struct device *dev, *tmp; + struct device *tmp; - avl_for_each_element_safe(&devices, dev, avl, tmp) { - if (!list_empty(&dev->users)) - continue; + if (dev) + return __device_free_unused(dev); - device_free(dev); - } + avl_for_each_element_safe(&devices, dev, avl, tmp) + __device_free_unused(dev); }