summaryrefslogtreecommitdiffstats
path: root/generic/tclIO.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2014-04-25 17:34:11 (GMT)
committerdgp <dgp@users.sourceforge.net>2014-04-25 17:34:11 (GMT)
commit0781259dd17444340c1a926c4cd2b5ade72bfebe (patch)
tree98d9db2e41a67bb86585de1fa5cb5bd1e83b0074 /generic/tclIO.c
parent790e5adaf4cabf6c9dcaa3d109427dbe18f786ff (diff)
downloadtcl-0781259dd17444340c1a926c4cd2b5ade72bfebe.zip
tcl-0781259dd17444340c1a926c4cd2b5ade72bfebe.tar.gz
tcl-0781259dd17444340c1a926c4cd2b5ade72bfebe.tar.bz2
Test iortrans-4.8.2 demos an infinite loop. Possible trouble with
pushback buffers.
Diffstat (limited to 'generic/tclIO.c')
-rw-r--r--generic/tclIO.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c
index e6439ef..41ac1e1 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -5611,6 +5611,11 @@ DoReadChars(
ResetFlag(statePtr, CHANNEL_BLOCKED);
}
result = GetInput(chanPtr);
+if (chanPtr != statePtr->topChanPtr) {
+Tcl_Release(chanPtr);
+chanPtr = statePtr->topChanPtr;
+Tcl_Preserve(chanPtr);
+}
if (result != 0) {
if (result == EAGAIN) {
break;