Windows nonblocking write: Dont't return if async I/O finishes immediately.

This commit is contained in:
Martin Ling 2013-12-07 20:16:38 +00:00
parent 1622ef60b0
commit 64d996216e
1 changed files with 10 additions and 3 deletions

View File

@ -1000,9 +1000,16 @@ enum sp_return sp_nonblocking_write(struct sp_port *port, const void *buf, size_
/* Start asynchronous write. */
if (WriteFile(port->hdl, &port->pending_byte, 1, NULL, &port->write_ovl) == 0) {
if (GetLastError() == ERROR_IO_PENDING) {
DEBUG("Asynchronous write started");
if (HasOverlappedIoCompleted(&port->write_ovl)) {
DEBUG("Asynchronous write completed immediately");
port->writing = 0;
written++;
continue;
} else {
DEBUG("Asynchronous write running");
port->writing = 1;
RETURN_VALUE("%d", ++written);
}
} else {
/* Actual failure of some kind. */
RETURN_FAIL("WriteFile() failed");