Hi,

this code from hcd.c:

                retval = hcd->driver->urb_dequeue (hcd, urb);

                /* hcds shouldn't really fail these calls, but... */
                if (retval) {
                        dev_dbg (sys, "dequeue %p --> %d\n", urb, retval);
                        if (!(urb->transfer_flags & URB_ASYNC_UNLINK)) {
                                spin_lock_irqsave (&urb->lock, flags);
                                urb->complete = splice.complete;
                                urb->context = splice.context;
                                spin_unlock_irqrestore (&urb->lock, flags);
                        }
                        goto bye;
                }

is deeply racy. It can change the context under a running completion handler.
I'd suggest that you declare urb_dequeue void and remove it.

        Regards
                Oliver



-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to