summaryrefslogtreecommitdiffstats
path: root/win/tclWinSerial.c
diff options
context:
space:
mode:
authoroehhar <harald.oehlmann@elmicron.de>2014-02-24 17:25:08 (GMT)
committeroehhar <harald.oehlmann@elmicron.de>2014-02-24 17:25:08 (GMT)
commitbc47ed9728afc2b9554570326e2afe173fae22d7 (patch)
tree303c36216197d1d2c637b2fadc81760ef71b47d7 /win/tclWinSerial.c
parent58b67990b95b7d36b3099c43cfcf6448b9c1b23d (diff)
parent38e56569f541a17fd0445bc3619d66e985e823db (diff)
downloadtcl-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.c25
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;
}