aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2010-10-11 11:36:37 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-10-20 23:18:15 -0400
commit9c84d89bf13b702ca0e0db5eb3880300c4bd58f4 (patch)
treec0b11f9fe5e386187881d59247a9e274046d7660
parent1cd72781db93c00fbee0bf4aed9e310a1d589738 (diff)
[media] radio-mr800: fix locking order
Don't hold the lock before unregistering the device, since when the device is unregistered the datastruct containing the lock may be freed (if the refcount went to 0). Also fixed the framework documentation that erroneously suggested the wrong locking order as well. Reported-by: David Ellingsworth <david@identd.dyndns.org> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Acked-by: David Ellingsworth <david@identd.dyndns.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--Documentation/video4linux/v4l2-framework.txt2
-rw-r--r--drivers/media/radio/radio-mr800.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
index a128e012a45c..f22f35c271f3 100644
--- a/Documentation/video4linux/v4l2-framework.txt
+++ b/Documentation/video4linux/v4l2-framework.txt
@@ -488,7 +488,7 @@ also waits in the code, then you should do the same to allow other processes
488to access the device node while the first process is waiting for something. 488to access the device node while the first process is waiting for something.
489 489
490The implementation of a hotplug disconnect should also take the lock before 490The implementation of a hotplug disconnect should also take the lock before
491calling v4l2_device_disconnect and video_unregister_device. 491calling v4l2_device_disconnect.
492 492
493video_device registration 493video_device registration
494------------------------- 494-------------------------
diff --git a/drivers/media/radio/radio-mr800.c b/drivers/media/radio/radio-mr800.c
index 97967ad3cd12..2f56b26cece9 100644
--- a/drivers/media/radio/radio-mr800.c
+++ b/drivers/media/radio/radio-mr800.c
@@ -285,8 +285,8 @@ static void usb_amradio_disconnect(struct usb_interface *intf)
285 285
286 mutex_lock(&radio->lock); 286 mutex_lock(&radio->lock);
287 v4l2_device_disconnect(&radio->v4l2_dev); 287 v4l2_device_disconnect(&radio->v4l2_dev);
288 video_unregister_device(&radio->videodev);
289 mutex_unlock(&radio->lock); 288 mutex_unlock(&radio->lock);
289 video_unregister_device(&radio->videodev);
290} 290}
291 291
292/* vidioc_querycap - query device capabilities */ 292/* vidioc_querycap - query device capabilities */