]> sigrok.org Git - libsigrok.git/commit
USB: On Windows, block to wait for libusb events
authorDaniel Elstner <redacted>
Fri, 4 Sep 2015 16:51:55 +0000 (18:51 +0200)
committerDaniel Elstner <redacted>
Fri, 4 Sep 2015 17:04:23 +0000 (19:04 +0200)
commit358c4ed5b8d9c010cfe78ca44607a2b376593cee
tree0542e8632d803204ffd9f4a5d44dc1367c881e4a
parent92248e7821d6ed98390088dab3a4edd329ef414a
USB: On Windows, block to wait for libusb events

This is another attempt at getting the mess that is libusb event
handling on Windows under control. Until libusb makes its HANDLEs
available for polling, we have no choice but to block while waiting
for libusb events. Since we do not want to force drivers to deal
with multi-threading issues, that means we have to block in the
session main loop.

Fortunately, it turns out that our drivers aren't using multiple
event sources, so it is actually possible to block the main loop
without disrupting too much. This also gets rid of the USB thread
on Windows. Thankfully, libusb does not seem to care that we are
now calling libusb_handle_events_timeout_completed() twice per
iteration: first a blocking call (with timeout) in the callback
wrapper, followed by the non-blocking call in the driver-supplied
callback.
src/libsigrok-internal.h
src/usb.c