{
dev_t devnum; /* must be first */
input_item_t *item;
+ services_discovery_t *sd;
};
struct subsys
{
struct device *d = data;
+ if (d->sd)
+ services_discovery_RemoveItem (d->sd, d->item);
vlc_gc_decref (d->item);
free (d);
}
vlc_gc_decref (item);
return -1;
}
- d->item = item;
d->devnum = udev_device_get_devnum (dev);
+ d->item = item;
+ d->sd = NULL;
struct device **dp = tsearch (d, &p_sys->root, cmpdev);
if (dp == NULL) /* Out-of-memory */
}
if (*dp != d) /* Overwrite existing device */
{
- services_discovery_RemoveItem (sd, (*dp)->item);
DestroyDevice (*dp);
*dp = d;
}
name = p_sys->subsys->get_cat (dev);
services_discovery_AddItem (sd, item, name ? name : "Generic");
+ d->sd = sd;
free (name);
return 0;
}
return;
struct device *d = *dp;
- services_discovery_RemoveItem (sd, d->item);
tdelete (d, &p_sys->root, cmpdev);
DestroyDevice (d);
}