diff options
author | Chris Liechti <cliechti@gmx.net> | 2016-05-25 01:51:42 +0200 |
---|---|---|
committer | Chris Liechti <cliechti@gmx.net> | 2016-05-25 01:51:42 +0200 |
commit | 3401840263f36691495ddb749def54e6fbd9ddf4 (patch) | |
tree | 2550ba9a97fd7b66d189a2bd641176bbe02f6d38 | |
parent | c57d2bcc5051c1d104ea6c1f1a3b489b6487f754 (diff) | |
download | pyserial-git-3401840263f36691495ddb749def54e6fbd9ddf4.tar.gz |
win32: fix close and improve cancel (no error when write is canceled)
-rw-r--r-- | serial/serialwin32.py | 5 | ||||
-rw-r--r-- | serial/win32.py | 1 |
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 |