From 6753743e11540b7fc54d03771458e2bd91ba411b Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 9 Aug 2016 23:32:57 +0200 Subject: [PATCH] [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 Signed-off-by: Mauro Carvalho Chehab --- drivers/media/media-entity.c | 6 ++++++ 1 file changed, 6 insertions(+) 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, -- 2.39.5