diff options
| author | dgp@users.sourceforge.net <dgp> | 2014-07-08 13:45:09 (GMT) |
|---|---|---|
| committer | dgp@users.sourceforge.net <dgp> | 2014-07-08 13:45:09 (GMT) |
| commit | 6eb65667c06a4bc557462cf0561aa730af20ab1f (patch) | |
| tree | 435e03d32cae768a23b54d64a1eda4ab26dd2be6 | |
| parent | 11cb01b78797341e38746c02d6d793ef9247006a (diff) | |
| download | tcl-6eb65667c06a4bc557462cf0561aa730af20ab1f.zip tcl-6eb65667c06a4bc557462cf0561aa730af20ab1f.tar.gz tcl-6eb65667c06a4bc557462cf0561aa730af20ab1f.tar.bz2 | |
The write and flush operations of reflected transforms ([chan push]) have
been converting all lower level channel errors from Tcl_WriteRaw() into
EINVAL. Generally this is a perplexing discard of useful information, but
worse it interferes with the EAGAIN signalling that is required to manage
the BLOCKED state of a nonblocking channel. Thanks to aspect for demo
scripts that pointed to the bug.
| -rw-r--r-- | generic/tclIORTrans.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/generic/tclIORTrans.c b/generic/tclIORTrans.c index d2707a1..45ee08d 100644 --- a/generic/tclIORTrans.c +++ b/generic/tclIORTrans.c @@ -3178,7 +3178,7 @@ TransformWrite( } if (res < 0) { - *errorCodePtr = EINVAL; + *errorCodePtr = Tcl_GetErrno(); return 0; } @@ -3288,7 +3288,7 @@ TransformFlush( } if (res < 0) { - *errorCodePtr = EINVAL; + *errorCodePtr = Tcl_GetErrno(); return 0; } |
