windows: workaround WaitForMultipleObjects max 64 events limitation.
authorFrank Li <Frank.Li@nxp.com>
Thu, 15 Aug 2019 15:21:17 +0000 (10:21 -0500)
committerNathan Hjelm <hjelmn@google.com>
Thu, 31 Oct 2019 02:05:42 +0000 (19:05 -0700)
commitc730a8410c8fc683e845fefcc06d6ced349b583b
treeaa9c527644fb07910a4ae847e5d149d153019a37
parent211d79185120519ca9c436855d3b7406359e793b
windows: workaround WaitForMultipleObjects max 64 events limitation.

WaitForMultiObjects have limiation. Only can wait max 64 events.

but usbi_poll may pass more than 64 fds. In previous implement,
only wait for first 64 events. if previous 64 events were not trigger
usbi_poll will wait for about 10s timemout eventhough other event triggered.

This patch workaround this limitation.

If max events less than 64, call WaitforMultiObjects directly.
If max events more than 64, group every 63 events into one work thread.

This thread call waitformulitobjects wait for this groug events and one
addtional thread exit events.
If any events trigger, this thread will trigger main notify events.

The main usbi_poll thread call waitforsingleobject wait for notify
events. If this events trigger, that means any of work threads get events.
Then call exit notify events let all working thread exit safely.

Return value changed, 0 means timeout. 1 - N means which event
triggered.

Closes #612

Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
libusb/os/poll_windows.c
libusb/version_nano.h