diff options
author | Max Kellermann <max.kellermann@gmail.com> | 2016-08-09 23:32:57 +0200 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-11-18 18:19:16 +0100 |
commit | 6753743e11540b7fc54d03771458e2bd91ba411b (patch) | |
tree | 6b77dc35ec3ec1465a4c2be7fc46471949074605 /drivers/media/media-entity.c | |
parent | [media] dvb_frontend: move kref to struct dvb_frontend (diff) | |
download | linux-6753743e11540b7fc54d03771458e2bd91ba411b.tar.xz linux-6753743e11540b7fc54d03771458e2bd91ba411b.zip |
[media] media-entity: clear media_gobj.mdev in _destroy()
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>
Diffstat (limited to 'drivers/media/media-entity.c')
-rw-r--r-- | drivers/media/media-entity.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c index c68239e60487..f9f723f5e4f0 100644 --- a/drivers/media/media-entity.c +++ b/drivers/media/media-entity.c @@ -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, |