diff options
author | vasiljevic <zv@archiware.com> | 2005-04-07 11:28:22 (GMT) |
---|---|---|
committer | vasiljevic <zv@archiware.com> | 2005-04-07 11:28:22 (GMT) |
commit | 837379c8953f7f14bd17b71ca39e1655ae7b0801 (patch) | |
tree | 497225b994ecdca3af2d1f21a8c90005fef8e090 | |
parent | 7d3a3e68004adf9dbf1956c5169fa22efbd17b08 (diff) | |
download | tcl-837379c8953f7f14bd17b71ca39e1655ae7b0801.zip tcl-837379c8953f7f14bd17b71ca39e1655ae7b0801.tar.gz tcl-837379c8953f7f14bd17b71ca39e1655ae7b0801.tar.bz2 |
Fixed TclpFreeAllocCache() to recognize when being called
with NULL argument. This is a signal for it to clean up
the tsd key associated with the threading allocator.
Part of fixing the Tcl Bug #1178445.
-rw-r--r-- | unix/tclUnixThrd.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/unix/tclUnixThrd.c b/unix/tclUnixThrd.c index ee080ba..bdac40d 100644 --- a/unix/tclUnixThrd.c +++ b/unix/tclUnixThrd.c @@ -927,13 +927,16 @@ TclpFreeAllocMutex(mutex) void TclpFreeAllocCache(ptr) void *ptr; { - extern void TclFreeAllocCache(void *); - - TclFreeAllocCache(ptr); - /* - * Perform proper cleanup of things done in TclpGetAllocCache. - */ - if (initialized) { + if (ptr != NULL) { + /* + * Called by the pthread lib when a thread exits + */ + TclFreeAllocCache(ptr); + } else if (initialized) { + /* + * Called by us in TclFinalizeThreadAlloc() during + * the library finalization initiated from Tcl_Finalize() + */ pthread_key_delete(key); initialized = 0; } |