Nikita V. Youshchenko wrote:
[..]
down (&usblp->sem);
[..]
Looks like (!usblp->wcomplete) was false, and (!usblp->present) was false, and (usblp->writeurb->status != 0), so it just looped in this loop forever, ignoring any signals.
[..]
Anyway. looks like some bug in the mentioned code? It's clear that busy-loop is possible there. Maybe at least it should check for signals after return from schedule()?

OK, here's a shot in the dark...

What if you, at least, replace the down() above with:

        if (down_interruptible (&usblp->sem))
                return -ERESTARTSYS;

Now you should be able to abort the cat.

However, the fact that usblp_check_status() ignores -ENODEV and returns
0 (OK) to usblp_write() is not really a hit.  Imho usblp_write() should
get -ENODEV, release usblp->sem, drop everything and let the driver
clean up.

Regards
 /Jocke


------------------------------------------------------- This SF.net email is sponsored by: 2005 Windows Mobile Application Contest Submit applications for Windows Mobile(tm)-based Pocket PCs or Smartphones for the chance to win $25,000 and application distribution. Enter today at http://ads.osdn.com/?ad_id=6882&alloc_id=15148&op=click _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to