summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Liechti <cliechti@gmx.net>2016-05-31 23:43:19 +0200
committerChris Liechti <cliechti@gmx.net>2016-05-31 23:43:19 +0200
commit91f63fdd8bb9ad3cfd6348aa8d3fa9eed2a1c60e (patch)
tree7092875df0d54d15d6b636ec6f7e32a12c2ff40e
parentfc264b85c87a6b7872f6e249ad1018567d85df8f (diff)
downloadpyserial-git-91f63fdd8bb9ad3cfd6348aa8d3fa9eed2a1c60e.tar.gz
win32: handle errors of GetOverlappedResult in read(), fixes #121
-rw-r--r--serial/serialwin32.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/serial/serialwin32.py b/serial/serialwin32.py
index 037f282..2a8cebb 100644
--- a/serial/serialwin32.py
+++ b/serial/serialwin32.py
@@ -283,11 +283,14 @@ class Serial(SerialBase):
ctypes.byref(self._overlapped_read))
if not read_ok and win32.GetLastError() not in (win32.ERROR_SUCCESS, win32.ERROR_IO_PENDING):
raise SerialException("ReadFile failed ({!r})".format(ctypes.WinError()))
- win32.GetOverlappedResult(
+ result_ok = win32.GetOverlappedResult(
self._port_handle,
ctypes.byref(self._overlapped_read),
ctypes.byref(rc),
True)
+ if not result_ok:
+ if win32.GetLastError() != win32.ERROR_OPERATION_ABORTED:
+ raise SerialException('call to GetOverlappedResult failed')
read = buf.raw[:rc.value]
else:
read = bytes()