summaryrefslogtreecommitdiffstats
path: root/generic/tclLoad.c
diff options
context:
space:
mode:
authornijtmans <nijtmans>2008-10-07 20:51:46 (GMT)
committernijtmans <nijtmans>2008-10-07 20:51:46 (GMT)
commitdc5c90f4a6e01534ffc03e64ca44c034c87a68df (patch)
treed84545033e20f70a541fc73d622ffe6b8526b48c /generic/tclLoad.c
parentcdb3076a4c8510e94caadbdf9440a95fe580421b (diff)
downloadtcl-dc5c90f4a6e01534ffc03e64ca44c034c87a68df.zip
tcl-dc5c90f4a6e01534ffc03e64ca44c034c87a68df.tar.gz
tcl-dc5c90f4a6e01534ffc03e64ca44c034c87a68df.tar.bz2
* tclWinTest.c: Fix compiler warning when compiling this file with mingw gcc:
tclWinTest.c:706: warning: dereferencing type-punned pointer will break strict-aliasing rules * generic/tclLoad.c: Make sure that any library which doesn't have an unloadproc is only really unloaded when no library code is executed yet. [Bug 2059262]
Diffstat (limited to 'generic/tclLoad.c')
-rw-r--r--generic/tclLoad.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/generic/tclLoad.c b/generic/tclLoad.c
index 29e2d01..89e003c 100644
--- a/generic/tclLoad.c
+++ b/generic/tclLoad.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclLoad.c,v 1.16 2007/02/20 23:24:03 nijtmans Exp $
+ * RCS: @(#) $Id: tclLoad.c,v 1.16.4.1 2008/10/07 20:51:46 nijtmans Exp $
*/
#include "tclInt.h"
@@ -795,7 +795,9 @@ Tcl_UnloadObjCmd(
if (unLoadProcPtr != NULL) {
Tcl_MutexLock(&packageMutex);
- (*unLoadProcPtr)(pkgPtr->loadHandle);
+ if (pkgPtr->unloadProc != NULL) {
+ (*unLoadProcPtr)(pkgPtr->loadHandle);
+ }
/*
* Remove this library from the loaded library cache.
@@ -1152,7 +1154,7 @@ TclFinalizeLoad(void)
if (pkgPtr->fileName[0] != '\0') {
Tcl_FSUnloadFileProc *unLoadProcPtr = pkgPtr->unLoadProcPtr;
- if (unLoadProcPtr != NULL) {
+ if ((unLoadProcPtr != NULL) && (pkgPtr->unloadProc != NULL)) {
(*unLoadProcPtr)(pkgPtr->loadHandle);
}
}