On Tue, 3 Feb 2009, Adam Baker wrote: > The sq905 driver doesn't use the URBs provided by gspca, it uses > usb_control_msg and usb_bulk_msg which I presume do the right thing > internally. There would be a tiny window in between when it checks the > dev->streaming flag and when it sends a new USB msg for the disconnect to > occur and invalidate the dev pointer. That could be fixed by holding > gspca_dev->usb_lock in gspca_disconnect when it sets gspca_dev->present = 0. > > That would also address the race between open and disconnect. > > Unfortunately the finepix driver sometimes uses calls to schedule_delayed_work > in the completion handler which then makes the call to usb_submit_urb. Fixing > that will require someone with access to a suitable camera to test it > otherwise there is a significant risk of adding deadlocks. It already suffers > from this bug so we aren't making it worse. If the driver submits URBs from a work routine then usb_kill_urb's guarantees don't apply. You'll need to synchronize all three routines: disconnect, the completion handler, and the work routine. That means you'll have to use a spinlock, since a completion handler isn't allowed to acquire a mutex. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html