V4L/DVB (9194): stk-webcam: fix crash on close after disconnect
authorDavid Ellingsworth <david@identd.dyndns.org>
Tue, 14 Oct 2008 01:31:15 +0000 (22:31 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 17 Oct 2008 20:15:06 +0000 (17:15 -0300)
This patch prevents stk-webcam from updating usb device information
once the camera has been removed. This prevents a crash that would
otherwise occur if the camera is disconnected while it is still in
use.

Signed-off-by: David Ellingsworth <david@identd.dyndns.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/stk-webcam.c

index f1d5b3eaa192bff624503e3d84ab41d5c717793f..edaea4964513ef3027a3673034877ee886d5743d 100644 (file)
@@ -559,7 +559,7 @@ static void stk_clean_iso(struct stk_camera *dev)
 
                urb = dev->isobufs[i].urb;
                if (urb) {
-                       if (atomic_read(&dev->urbs_used))
+                       if (atomic_read(&dev->urbs_used) && is_present(dev))
                                usb_kill_urb(urb);
                        usb_free_urb(urb);
                }
@@ -688,18 +688,14 @@ static int v4l_stk_release(struct inode *inode, struct file *fp)
 {
        struct stk_camera *dev = fp->private_data;
 
-       if (dev->owner != fp) {
-               usb_autopm_put_interface(dev->interface);
-               return 0;
+       if (dev->owner == fp) {
+               stk_stop_stream(dev);
+               stk_free_buffers(dev);
+               dev->owner = NULL;
        }
 
-       stk_stop_stream(dev);
-
-       stk_free_buffers(dev);
-
-       dev->owner = NULL;
-
-       usb_autopm_put_interface(dev->interface);
+       if(is_present(dev))
+               usb_autopm_put_interface(dev->interface);
 
        return 0;
 }