[media] v4l: async: Make it safe to unregister unregistered notifier
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Wed, 3 Jul 2013 10:49:06 +0000 (07:49 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Sun, 18 Aug 2013 11:49:33 +0000 (08:49 -0300)
Calling v4l2_async_notifier_unregister() on a notifier that hasn't been
registered leads to a crash. To simplify drivers, make it safe to
unregister a notifier that has not been registered.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/v4l2-core/v4l2-async.c

index b350ab99652ce58131b8d8b8505c61d5accce9c6..10bb62cb8d7d2c886731aa82bd0c0a39554a9c2e 100644 (file)
@@ -192,6 +192,9 @@ void v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier)
        struct device *dev[n_subdev];
        int i = 0;
 
+       if (!notifier->v4l2_dev)
+               return;
+
        mutex_lock(&list_lock);
 
        list_del(&notifier->list);
@@ -225,6 +228,9 @@ void v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier)
                }
                put_device(d);
        }
+
+       notifier->v4l2_dev = NULL;
+
        /*
         * Don't care about the waiting list, it is initialised and populated
         * upon notifier registration.