diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2009-01-26 16:25:59 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2009-01-26 16:25:59 (GMT) |
commit | 06246dc255be570cc95cf8e6234f079b4b93f94a (patch) | |
tree | 88c00fe6074765780e77395343b29a533a9c1c79 | |
parent | 4d2c8ff94995922844eb90c417935958838c36d0 (diff) | |
download | tcl-06246dc255be570cc95cf8e6234f079b4b93f94a.zip tcl-06246dc255be570cc95cf8e6234f079b4b93f94a.tar.gz tcl-06246dc255be570cc95cf8e6234f079b4b93f94a.tar.bz2 |
Fix [Bug 2536400]
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | generic/tclZlib.c | 14 |
2 files changed, 14 insertions, 5 deletions
@@ -1,3 +1,8 @@ +2009-01-26 Donal K. Fellows <dkf@users.sf.net> + + * generic/tclZlib.c (ChanClose): Only generate error messages in the + interpreter when the thread is not being closed down. [Bug 2536400] + 2009-01-23 Donal K. Fellows <dkf@users.sf.net> * doc/zlib.n: Added a note that 'zlib push' is reversed by 'chan pop'. diff --git a/generic/tclZlib.c b/generic/tclZlib.c index 5fefab7..033251b 100644 --- a/generic/tclZlib.c +++ b/generic/tclZlib.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclZlib.c,v 1.21 2008/12/28 17:37:48 dkf Exp $ + * RCS: @(#) $Id: tclZlib.c,v 1.22 2009/01/26 16:25:59 dkf Exp $ */ #include "tclInt.h" @@ -2228,7 +2228,9 @@ ChanClose( e = deflate(&cd->outStream, Z_FINISH); if (e != Z_OK && e != Z_STREAM_END) { /* TODO: is this the right way to do errors on close? */ - ConvertError(interp, e); + if (!TclInThreadExit()) { + ConvertError(interp, e); + } result = TCL_ERROR; break; } @@ -2236,8 +2238,11 @@ ChanClose( if (Tcl_WriteRaw(cd->parent, cd->outBuffer, cd->outAllocated - cd->outStream.avail_out) < 0) { /* TODO: is this the right way to do errors on close? */ - Tcl_AppendResult(interp, "error while finalizing file: ", - Tcl_PosixError(interp), NULL); + if (!TclInThreadExit()) { + Tcl_AppendResult(interp, + "error while finalizing file: ", + Tcl_PosixError(interp), NULL); + } result = TCL_ERROR; break; } @@ -2252,7 +2257,6 @@ ChanClose( ckfree(cd->inBuffer); cd->inBuffer = NULL; } - if (cd->outBuffer) { ckfree(cd->outBuffer); cd->outBuffer = NULL; |