summaryrefslogtreecommitdiffstats
path: root/generic/tclIO.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2014-05-31 02:40:00 (GMT)
committerdgp <dgp@users.sourceforge.net>2014-05-31 02:40:00 (GMT)
commit9b701fdae73c40aaff17354d1b5ec80aad5f6010 (patch)
tree8772939968bbf992cb7f11d20a0a235c7cd4c691 /generic/tclIO.c
parent3dcb02dc073df91fefb0d11006f1e9e3af8b9b4e (diff)
parent1f197f004a8ea114fe3cd6d3c8ec925200584e1c (diff)
downloadtcl-9b701fdae73c40aaff17354d1b5ec80aad5f6010.zip
tcl-9b701fdae73c40aaff17354d1b5ec80aad5f6010.tar.gz
tcl-9b701fdae73c40aaff17354d1b5ec80aad5f6010.tar.bz2
Correct the interest masks in the Tcl_CreateFileHandler() calls in PipeWatchProc(). When we are interested in both readable and writable events of a command pipeline channel, we only want the readable from the read end of the pipe, and the writable from the write end of the pipe.
Diffstat (limited to 'generic/tclIO.c')
-rw-r--r--generic/tclIO.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c
index d356e11..7d94037 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -2777,11 +2777,18 @@ FlushChannel(
ResetFlag(statePtr, BG_FLUSH_SCHEDULED);
ChanWatch(chanPtr, statePtr->interestMask);
} else {
- /* TODO: If code reaches this point, it means a writable
- * event is being handled on the channel, but the channel
- * could not in fact be written to. This ought not happen,
- * but Unix pipes appear to act this way (see io-53.4).
- * Also can imagine broken reflected channels. */
+
+ /*
+ * When we are calledFromAsyncFlush, that means a writable
+ * state on the channel triggered the call, so we should be
+ * able to write something. Either we did write something
+ * and wroteSome should be set, or there was nothing left to
+ * write in this call, and we've completed the BG flush.
+ * These are the two cases above. If we get here, that means
+ * there is some kind failure in the writable event machinery.
+ */
+
+ assert(!calledFromAsyncFlush);
}
}