[media] media-entity: clear media_gobj.mdev in _destroy()
authorMax Kellermann <max.kellermann@gmail.com>
Tue, 9 Aug 2016 21:32:57 +0000 (23:32 +0200)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Fri, 18 Nov 2016 17:19:16 +0000 (15:19 -0200)
media_gobj_destroy() may be called twice on one instance - once by
media_device_unregister() and again by dvb_media_device_free().  The
function media_remove_intf_links() establishes and documents the
convention that mdev==NULL means that the object is not registered,
but nobody ever NULLs this variable.  So this patch really implements
this behavior, and adds another mdev==NULL check to
media_gobj_destroy() to protect against double removal.

Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/media-entity.c

index c68239e604875b8c8078b657b24a220a7b511a2c..f9f723f5e4f06bdcb1c306e61c597bb187bcfb49 100644 (file)
@@ -205,10 +205,16 @@ void media_gobj_destroy(struct media_gobj *gobj)
 {
        dev_dbg_obj(__func__, gobj);
 
+       /* Do nothing if the object is not linked. */
+       if (gobj->mdev == NULL)
+               return;
+
        gobj->mdev->topology_version++;
 
        /* Remove the object from mdev list */
        list_del(&gobj->list);
+
+       gobj->mdev = NULL;
 }
 
 int media_entity_pads_init(struct media_entity *entity, u16 num_pads,