dev->refcount = 1;
dev->tree = tree;
- lsblk_ref_devtree(dev->tree);
INIT_LIST_HEAD(&dev->deps);
INIT_LIST_HEAD(&dev->ls_roots);
void lsblk_unref_device(struct lsblk_device *dev)
{
- if (dev)
+ if (!dev)
return;
if (--dev->refcount <= 0) {
device_remove_dependences(dev);
lsblk_device_free_properties(dev->properties);
- if (dev->tree)
- lsblk_devtree_remove_device(dev->tree, dev);
-
free(dev->name);
free(dev->dm_name);
free(dev->filename);
free(dev->mountpoint);
ul_unref_path(dev->sysfs);
- lsblk_ref_devtree(dev->tree);
free(dev);
}
void lsblk_unref_devtree(struct lsblk_devtree *tr)
{
- if (tr)
+ if (!tr)
return;
if (--tr->refcount <= 0) {
DBG(TREE, ul_debugobj(tr, "dealloc"));
- while (!list_empty(&tr->roots)) {
- struct lsblk_device *dev = list_entry(tr->roots.next,
- struct lsblk_device, ls_roots);
- lsblk_unref_device(dev);
- }
while (!list_empty(&tr->devices)) {
struct lsblk_device *dev = list_entry(tr->devices.next,
struct lsblk_device, ls_devices);
- lsblk_unref_device(dev);
+ lsblk_devtree_remove_device(tr, dev);
}
free(tr);
}