From 56e9c5c947e0b823c849db2ba32b86e382615f55 Mon Sep 17 00:00:00 2001 From: andreas_kupries Date: Fri, 7 Mar 2008 22:42:48 +0000 Subject: * generic/tclResult.c (ReleaseKeys): Workaround for [Bug 1904907]. Reset the return option keys to NULL to allow full re-initialization by GetKeys(). This introduces a memory leak for the key objects, but gets us around a crash in the finalization of reflected channels when handling returns, either at compile- or runtime. In both cases we access the keys after they have been released by their thread exit handler. A proper fix is entangled with the untangling of the finalization ordering and attendant issues. For now we choose the lesser evil. --- ChangeLog | 13 +++++++++++++ generic/tclResult.c | 3 ++- unix/dltest/Makefile.in | 4 ++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index cce551f..732fa60 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2008-03-07 Andreas Kupries + + * generic/tclResult.c (ReleaseKeys): Workaround for [Bug + 1904907]. Reset the return option keys to NULL to allow full + re-initialization by GetKeys(). This introduces a memory leak + for the key objects, but gets us around a crash in the + finalization of reflected channels when handling returns, either + at compile- or runtime. In both cases we access the keys after + they have been released by their thread exit handler. A proper + fix is entangled with the untangling of the finalization + ordering and attendant issues. For now we choose the lesser + evil. + 2008-03-07 Don Porter * generic/tclExecute.c (Tcl_ExprObj): Revised expression bytecode diff --git a/generic/tclResult.c b/generic/tclResult.c index f9ef5b6..054ba9d 100644 --- a/generic/tclResult.c +++ b/generic/tclResult.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclResult.c,v 1.46 2008/02/29 21:02:20 dgp Exp $ + * RCS: @(#) $Id: tclResult.c,v 1.47 2008/03/07 22:42:49 andreas_kupries Exp $ */ #include "tclInt.h" @@ -1161,6 +1161,7 @@ ReleaseKeys( for (i = KEY_CODE; i < KEY_LAST; i++) { Tcl_DecrRefCount(keys[i]); + keys[i] = NULL; } } diff --git a/unix/dltest/Makefile.in b/unix/dltest/Makefile.in index 53a45a9..5ac2df0 100644 --- a/unix/dltest/Makefile.in +++ b/unix/dltest/Makefile.in @@ -1,7 +1,7 @@ # This Makefile is used to create several test cases for Tcl's load # command. It also illustrates how to take advantage of configuration # exported by Tcl to set up Makefiles for shared libraries. -# RCS: @(#) $Id: Makefile.in,v 1.20 2006/12/17 03:47:09 das Exp $ +# RCS: @(#) $Id: Makefile.in,v 1.21 2008/03/07 22:42:53 andreas_kupries Exp $ CC = @CC@ LIBS = @TCL_BUILD_STUB_LIB_SPEC@ @TCL_LIBS@ @@ -99,4 +99,4 @@ clean: fi distclean: clean - rm -f Makefile + rm -f Makefile \ No newline at end of file -- cgit v0.12