commit | 00e36c829fe87a3d285d7a774eb8a1ca8797d0c0 | [log] [tgz] |
---|---|---|
author | Hans de Goede <hdegoede@redhat.com> | Tue Jun 07 12:12:38 2016 +0200 |
committer | Nathan Hjelm <hjelmn@me.com> | Wed Aug 17 12:52:40 2016 -0600 |
tree | 47ee07189a4136faae9a2e91590f922bf29c5fa5 | |
parent | 9542c38cf2cbd911bd7e3ec161e564b3ae63d4fe [diff] |
linux_usbfs: Deal with receiving POLLERR before all transfers have completed The linux kernel will set its internal device state to USB_STATE_NOTATTACHED as soon as it detects the disconnect, and then start a worker thread to deal with the actual disconnection, kill outstanding urbs, etc. The usbfs poll implementation will return POLL_ERR as soon as ps->dev->state == USB_STATE_NOTATTACHED. The kernel will not wakeup the poll until it is done with processing the disconnection. But if we happen to call poll() between the state change and the disconnection being fully processed, we may not be able to reap all outstanding transfers, even on kernels with the USBFS_CAP_REAP_AFTER_DISCONNECT capability. This commit deals with this by trying to reap as many transfers as possible on disconnect on USBFS_CAP_REAP_AFTER_DISCONNECT capable kernels and then calling usbi_handle_disconnect(handle) to deal with any remaining ones. On USBFS_CAP_REAP_AFTER_DISCONNECT capable kernels this will be a no-op unless we hit the race. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
libusb is a library for USB device access from Linux, Mac OS X, Windows, OpenBSD/NetBSD and Haiku userspace. It is written in C (Haiku backend in C++) and licensed under the GNU Lesser General Public License version 2.1 or, at your option, any later version (see COPYING).
libusb is abstracted internally in such a way that it can hopefully be ported to other operating systems. Please see the PORTING file for more information.
libusb homepage: http://libusb.info/
Developers will wish to consult the API documentation: http://api.libusb.info
Use the mailing list for questions, comments, etc: http://mailing-list.libusb.info
(Please use the mailing list rather than mailing developers directly)