Fix Windows device asynchronous write behavior.
authorEtienne Dechamps <etienne@edechamps.fr>
Sat, 14 Mar 2015 18:19:22 +0000 (18:19 +0000)
committerEtienne Dechamps <etienne@edechamps.fr>
Sun, 15 Mar 2015 10:34:40 +0000 (10:34 +0000)
commit89715454c083aaeb4dc73340f2d0ab9a3d9503e0
tree89de71b83f88f5b2ed4c59734ac68555535cf887
parent675142c7d88c9d325c0ca0bc5761072a5d810c75
Fix Windows device asynchronous write behavior.

Write operations to the Windows device do not necessarily complete
immediately; in fact, with the latest TAP-Win32 drivers, this never
seems to be the case.

write_packet() does not handle that case correctly, because the
OVERLAPPED structure and the packet data go out of scope before the
write operation completes, resulting in race conditions.

This commit fixes the issue by making sure these data structures are
kept in global scope, and by dropping any packets that may arrive while
the previous write operation is still pending.
src/mingw/device.c