diff options
author | oehhar <harald.oehlmann@elmicron.de> | 2014-02-24 17:25:08 (GMT) |
---|---|---|
committer | oehhar <harald.oehlmann@elmicron.de> | 2014-02-24 17:25:08 (GMT) |
commit | bc47ed9728afc2b9554570326e2afe173fae22d7 (patch) | |
tree | 303c36216197d1d2c637b2fadc81760ef71b47d7 /win/tclWinSerial.c | |
parent | 58b67990b95b7d36b3099c43cfcf6448b9c1b23d (diff) | |
parent | 38e56569f541a17fd0445bc3619d66e985e823db (diff) | |
download | tcl-bc47ed9728afc2b9554570326e2afe173fae22d7.zip tcl-bc47ed9728afc2b9554570326e2afe173fae22d7.tar.gz tcl-bc47ed9728afc2b9554570326e2afe173fae22d7.tar.bz2 |
Do not reopen a win serial channel for serial detection. There are issues with some Bluetooth virtual com. Fix bug [2413550], patch by Rolf Schroedter
Diffstat (limited to 'win/tclWinSerial.c')
-rw-r--r-- | win/tclWinSerial.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/win/tclWinSerial.c b/win/tclWinSerial.c index d5244ac..83f1866 100644 --- a/win/tclWinSerial.c +++ b/win/tclWinSerial.c @@ -1410,23 +1410,22 @@ SerialWriterThread( /* *---------------------------------------------------------------------- * - * TclWinSerialReopen -- + * TclWinSerialOpen -- * - * Reopens the serial port with the OVERLAPPED FLAG set + * Opens or Reopens the serial port with the OVERLAPPED FLAG set * * Results: - * Returns the new handle, or INVALID_HANDLE_VALUE. Normally there - * shouldn't be any error, because the same channel has previously been - * succeesfully opened. + * Returns the new handle, or INVALID_HANDLE_VALUE. + * If an existing channel is specified it is closed and reopened. * * Side effects: - * May close the original handle + * May close/reopen the original handle * *---------------------------------------------------------------------- */ HANDLE -TclWinSerialReopen( +TclWinSerialOpen( HANDLE handle, CONST TCHAR *name, DWORD access) @@ -1434,16 +1433,22 @@ TclWinSerialReopen( SerialInit(); /* + * If an open channel is specified, close it + */ + + if ( handle != INVALID_HANDLE_VALUE && CloseHandle(handle) == FALSE) { + return INVALID_HANDLE_VALUE; + } + + /* * Multithreaded I/O needs the overlapped flag set otherwise * ClearCommError blocks under Windows NT/2000 until serial output is * finished */ - if (CloseHandle(handle) == FALSE) { - return INVALID_HANDLE_VALUE; - } handle = (*tclWinProcs->createFileProc)(name, access, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); + return handle; } |