Revision 227ebeb5
b/usb-linux.c | ||
---|---|---|
315 | 315 |
} |
316 | 316 |
} |
317 | 317 |
|
318 |
static void async_cancel(USBPacket *unused, void *opaque)
|
|
318 |
static void async_cancel(USBPacket *p, void *opaque)
|
|
319 | 319 |
{ |
320 |
AsyncURB *aurb = opaque;
|
|
321 |
USBHostDevice *s = aurb->hdev;
|
|
320 |
USBHostDevice *s = opaque;
|
|
321 |
AsyncURB *aurb;
|
|
322 | 322 |
|
323 |
DPRINTF("husb: async cancel. aurb %p\n", aurb); |
|
323 |
QLIST_FOREACH(aurb, &s->aurbs, next) { |
|
324 |
if (p != aurb->packet) { |
|
325 |
continue; |
|
326 |
} |
|
324 | 327 |
|
325 |
/* Mark it as dead (see async_complete above) */ |
|
326 |
aurb->packet = NULL; |
|
328 |
DPRINTF("husb: async cancel: packet %p, aurb %p\n", p, aurb); |
|
327 | 329 |
|
328 |
int r = ioctl(s->fd, USBDEVFS_DISCARDURB, aurb); |
|
329 |
if (r < 0) { |
|
330 |
DPRINTF("husb: async. discard urb failed errno %d\n", errno); |
|
330 |
/* Mark it as dead (see async_complete above) */ |
|
331 |
aurb->packet = NULL; |
|
332 |
|
|
333 |
int r = ioctl(s->fd, USBDEVFS_DISCARDURB, aurb); |
|
334 |
if (r < 0) { |
|
335 |
DPRINTF("husb: async. discard urb failed errno %d\n", errno); |
|
336 |
} |
|
331 | 337 |
} |
332 | 338 |
} |
333 | 339 |
|
... | ... | |
696 | 702 |
} |
697 | 703 |
} |
698 | 704 |
|
699 |
usb_defer_packet(p, async_cancel, aurb);
|
|
705 |
usb_defer_packet(p, async_cancel, s);
|
|
700 | 706 |
return USB_RET_ASYNC; |
701 | 707 |
} |
702 | 708 |
|
... | ... | |
828 | 834 |
} |
829 | 835 |
} |
830 | 836 |
|
831 |
usb_defer_packet(p, async_cancel, aurb);
|
|
837 |
usb_defer_packet(p, async_cancel, s);
|
|
832 | 838 |
return USB_RET_ASYNC; |
833 | 839 |
} |
834 | 840 |
|
Also available in: Unified diff