diff options
| author | andreask@activestate.com <andreas_kupries> | 2008-03-07 22:42:48 (GMT) |
|---|---|---|
| committer | andreask@activestate.com <andreas_kupries> | 2008-03-07 22:42:48 (GMT) |
| commit | 03ee8459ed847e1f9d1dfbb3355a2d12b0bf7144 (patch) | |
| tree | fcfc35f56a9cec72b96133d5e90043cd507c4f85 /generic/tclResult.c | |
| parent | cdad318937293d5d3719843c10b7270acc4cec85 (diff) | |
| download | tcl-03ee8459ed847e1f9d1dfbb3355a2d12b0bf7144.zip tcl-03ee8459ed847e1f9d1dfbb3355a2d12b0bf7144.tar.gz tcl-03ee8459ed847e1f9d1dfbb3355a2d12b0bf7144.tar.bz2 | |
* 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.
Diffstat (limited to 'generic/tclResult.c')
| -rw-r--r-- | generic/tclResult.c | 3 |
1 files changed, 2 insertions, 1 deletions
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; } } |
