diff options
author | andreas_kupries <akupries@shaw.ca> | 2009-10-23 19:09:02 (GMT) |
---|---|---|
committer | andreas_kupries <akupries@shaw.ca> | 2009-10-23 19:09:02 (GMT) |
commit | f00682186bc011c9dea0bb6125848af3af894c87 (patch) | |
tree | 94863f3bd004fdd79f99009e4d4c9b25c3892c3e | |
parent | fdcd9d45ff7ee98fcf1fb2b950963234e42abf54 (diff) | |
download | tcl-f00682186bc011c9dea0bb6125848af3af894c87.zip tcl-f00682186bc011c9dea0bb6125848af3af894c87.tar.gz tcl-f00682186bc011c9dea0bb6125848af3af894c87.tar.bz2 |
* generic/tclIO.c (FlushChannel): Skip OutputProc for low-level
0-length writes. When closing pipes which have already been closed
not skipping leads to spurious SIG_PIPE signals. Reported by
Mikhail Teterin <mi+thun@aldan.algebra.com>.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | generic/tclIO.c | 8 |
2 files changed, 13 insertions, 2 deletions
@@ -1,3 +1,10 @@ +2009-10-23 Andreas Kupries <andreask@activestate.com> + + * generic/tclIO.c (FlushChannel): Skip OutputProc for low-level + 0-length writes. When closing pipes which have already been closed + not skipping leads to spurious SIG_PIPE signals. Reported by + Mikhail Teterin <mi+thun@aldan.algebra.com>. + 2009-10-21 Donal K. Fellows <dkf@users.sf.net> * generic/tclPosixStr.c: [Bug 2882561]: Work around oddity on Haiku OS diff --git a/generic/tclIO.c b/generic/tclIO.c index a74cd04..fe5ea86 100644 --- a/generic/tclIO.c +++ b/generic/tclIO.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIO.c,v 1.137.2.12 2009/10/19 21:59:18 dgp Exp $ + * RCS: @(#) $Id: tclIO.c,v 1.137.2.13 2009/10/23 19:09:02 andreas_kupries Exp $ */ #include "tclInt.h" @@ -2314,8 +2314,12 @@ FlushChannel( */ toWrite = BytesLeft(bufPtr); - written = (chanPtr->typePtr->outputProc)(chanPtr->instanceData, + if (toWrite == 0) { + written = 0; + } else { + written = (chanPtr->typePtr->outputProc)(chanPtr->instanceData, RemovePoint(bufPtr), toWrite, &errorCode); + } /* * If the write failed completely attempt to start the asynchronous |