The read loop could exit while a async read request is still in flight, which could complete after test_read_device has returned. This results in a stack use-after-return of `overlapped`.
* * *
Finally had something caught by the unix side AddressSanitizer, PE ASan wouldn't have caught this.