summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Liechti <cliechti@gmx.net>2016-05-25 01:51:42 +0200
committerChris Liechti <cliechti@gmx.net>2016-05-25 01:51:42 +0200
commit3401840263f36691495ddb749def54e6fbd9ddf4 (patch)
tree2550ba9a97fd7b66d189a2bd641176bbe02f6d38
parentc57d2bcc5051c1d104ea6c1f1a3b489b6487f754 (diff)
downloadpyserial-git-3401840263f36691495ddb749def54e6fbd9ddf4.tar.gz
win32: fix close and improve cancel (no error when write is canceled)
-rw-r--r--serial/serialwin32.py5
-rw-r--r--serial/win32.py1
2 files changed, 5 insertions, 1 deletions
diff --git a/serial/serialwin32.py b/serial/serialwin32.py
index d11a2c4..9cb2620 100644
--- a/serial/serialwin32.py
+++ b/serial/serialwin32.py
@@ -226,7 +226,7 @@ class Serial(SerialBase):
def _close(self):
"""internal close port helper"""
- if self._port_handle:
+ if self._port_handle is not None:
# Restore original timeout values:
win32.SetCommTimeouts(self._port_handle, self._orgTimeouts)
if self._overlapped_read is not None:
@@ -237,6 +237,7 @@ class Serial(SerialBase):
self.cancel_write()
win32.CloseHandle(self._overlapped_write.hEvent)
self._overlapped_write = None
+ win32.CloseHandle(self._port_handle)
self._port_handle = None
def close(self):
@@ -312,6 +313,8 @@ class Serial(SerialBase):
# Wait for the write to complete.
#~ win32.WaitForSingleObject(self._overlapped_write.hEvent, win32.INFINITE)
err = win32.GetOverlappedResult(self._port_handle, self._overlapped_write, ctypes.byref(n), True)
+ if win32.GetLastError() == win32.ERROR_OPERATION_ABORTED:
+ return n.value # canceled IO is no error
if n.value != len(data):
raise writeTimeoutError
return n.value
diff --git a/serial/win32.py b/serial/win32.py
index 2fddf6b..31f21ee 100644
--- a/serial/win32.py
+++ b/serial/win32.py
@@ -219,6 +219,7 @@ EV_DSR = 16 # Variable c_int
MAXDWORD = 4294967295 # Variable c_uint
EV_RLSD = 32 # Variable c_int
ERROR_SUCCESS = 0
+ERROR_OPERATION_ABORTED = 995
ERROR_IO_INCOMPLETE = 996
ERROR_IO_PENDING = 997 # Variable c_long
MS_CTS_ON = 16 # Variable c_ulong