summaryrefslogtreecommitdiffstats
path: root/ChangeLog
diff options
context:
space:
mode:
authorandreas_kupries <akupries@shaw.ca>2001-09-27 02:12:19 (GMT)
committerandreas_kupries <akupries@shaw.ca>2001-09-27 02:12:19 (GMT)
commitb60e127643bd0ad00cf457b77b1de6e0977f6b2c (patch)
tree0beb65d7525d5189c5c642af4a1584434db45e64 /ChangeLog
parentba7ec07f7706f8723f0b5d8ed3df3ff3c6ab7057 (diff)
downloadtcl-b60e127643bd0ad00cf457b77b1de6e0977f6b2c.zip
tcl-b60e127643bd0ad00cf457b77b1de6e0977f6b2c.tar.gz
tcl-b60e127643bd0ad00cf457b77b1de6e0977f6b2c.tar.bz2
* The changes below fix [Bug #462317] where Expect tried to read
more than was in the buffers and then blocked in the OS call as its pty channel driver provides no blockmodeproc through which the OS could be notified of blocking-behaviour. Because of this the general I/O core has to take more care than usual to preserve the semantics of non-blocking channels. * generic/tclIO.c (Tcl_ReadRaw): Do not read from the driver if the channel is non-blocking and the fileevent causing the read was generated by a timer. We do not know if there is data available from the OS. Instead of going to the OS for more and potentially blocking we simply signal EWOULDBLOCK to the higher levels to cause the system to wait for true fileevents. (GetInput): Same as before. (ChannelTimerProc): Added set and clear of CHANNEL_TIMER_FEV. * generic/tclIO.h (CHANNEL_TIMER_FEV): New flag for channels. Is set if a fileevent was generated by a timer, the channel is not blocking and the driver did not provide a blockmodeproc. In that case the I/O core has to be especially careful about going to the driver for more data.
Diffstat (limited to 'ChangeLog')
-rw-r--r--ChangeLog24
1 files changed, 24 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 8e541a3..0a3c241 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+2001-09-26 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * The changes below fix [Bug #462317] where Expect tried to read
+ more than was in the buffers and then blocked in the OS call as
+ its pty channel driver provides no blockmodeproc through which
+ the OS could be notified of blocking-behaviour. Because of this
+ the general I/O core has to take more care than usual to
+ preserve the semantics of non-blocking channels.
+
+ * generic/tclIO.c (Tcl_ReadRaw): Do not read from the driver if
+ the channel is non-blocking and the fileevent causing the read
+ was generated by a timer. We do not know if there is data
+ available from the OS. Instead of going to the OS for more and
+ potentially blocking we simply signal EWOULDBLOCK to the higher
+ levels to cause the system to wait for true fileevents.
+ (GetInput): Same as before.
+ (ChannelTimerProc): Added set and clear of CHANNEL_TIMER_FEV.
+
+ * generic/tclIO.h (CHANNEL_TIMER_FEV): New flag for channels. Is
+ set if a fileevent was generated by a timer, the channel is not
+ blocking and the driver did not provide a blockmodeproc. In that
+ case the I/O core has to be especially careful about going to
+ the driver for more data.
+
2001-09-26 Don Porter <dgp@users.sourceforge.net>
* doc/SplitPath.3 (Tcl_GetPathType):