瀏覽代碼

[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>
Hans Verkuil 14 年之前
父節點
當前提交
9c84d89bf1
共有 2 個文件被更改,包括 2 次插入2 次删除
  1. 1 1
      Documentation/video4linux/v4l2-framework.txt
  2. 1 1
      drivers/media/radio/radio-mr800.c

+ 1 - 1
Documentation/video4linux/v4l2-framework.txt

@@ -488,7 +488,7 @@ also waits in the code, then you should do the same to allow other processes
 to access the device node while the first process is waiting for something.
 
 The implementation of a hotplug disconnect should also take the lock before
-calling v4l2_device_disconnect and video_unregister_device.
+calling v4l2_device_disconnect.
 
 video_device registration
 -------------------------

+ 1 - 1
drivers/media/radio/radio-mr800.c

@@ -285,8 +285,8 @@ static void usb_amradio_disconnect(struct usb_interface *intf)
 
 	mutex_lock(&radio->lock);
 	v4l2_device_disconnect(&radio->v4l2_dev);
-	video_unregister_device(&radio->videodev);
 	mutex_unlock(&radio->lock);
+	video_unregister_device(&radio->videodev);
 }
 
 /* vidioc_querycap - query device capabilities */