diff options
| author | apnadkarni <apnmbx-wits@yahoo.com> | 2022-08-20 12:16:10 (GMT) |
|---|---|---|
| committer | apnadkarni <apnmbx-wits@yahoo.com> | 2022-08-20 12:16:10 (GMT) |
| commit | b00b14a7fd336ad3a98519a59657d143e4ef1ae0 (patch) | |
| tree | 8075f444ce5a6401ad65dd18e8dc1d87011b86bd | |
| parent | da40e7deb9d3e26315a495419b6ed50f0099bdc7 (diff) | |
| download | tcl-b00b14a7fd336ad3a98519a59657d143e4ef1ae0.zip tcl-b00b14a7fd336ad3a98519a59657d143e4ef1ae0.tar.gz tcl-b00b14a7fd336ad3a98519a59657d143e4ef1ae0.tar.bz2 | |
Really closes [baa51423c28a3baf]
| -rw-r--r-- | win/tclWinConsole.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/win/tclWinConsole.c b/win/tclWinConsole.c index 30a09fd..0e38c5b 100644 --- a/win/tclWinConsole.c +++ b/win/tclWinConsole.c @@ -862,19 +862,26 @@ ConsoleCheckProc( /* Pointer is safe to access as we are holding gConsoleLock */ if (handleInfoPtr == NULL) { + /* Stale event */ continue; } - + needEvent = 0; AcquireSRWLockShared(&handleInfoPtr->lock); - /* Rememebr channel is read or write, never both */ + /* Rememeber channel is read or write, never both */ if (chanInfoPtr->watchMask & TCL_READABLE) { if (RingBufferLength(&handleInfoPtr->buffer) > 0 - || handleInfoPtr->lastError != ERROR_SUCCESS - ) { + || handleInfoPtr->lastError != ERROR_SUCCESS) { needEvent = 1; /* Input data available or error/EOF */ } - } else if (chanInfoPtr->watchMask & TCL_WRITABLE) { + /* + * TCL_READABLE watch means someone is looking out for data being + * available, let reader thread know. + */ + handleInfoPtr->flags |= CONSOLE_DATA_AWAITED; + WakeConditionVariable(&handleInfoPtr->consoleThreadCV); + } + else if (chanInfoPtr->watchMask & TCL_WRITABLE) { if (RingBufferHasFreeSpace(&handleInfoPtr->buffer)) { needEvent = 1; /* Output space available */ } |
