1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/*
* tclLoad.c --
*
* This file provides the generic portion (those that are the same on all
* platforms) of Tcl's dynamic loading facilities.
*
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
*
* 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.18 2008/07/21 21:25:21 nijtmans Exp $
*/
#include "tclInt.h"
/*
* The following structure describes a package that has been loaded either
* dynamically (with the "load" command) or statically (as indicated by a call
|
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/*
* tclLoad.c --
*
* This file provides the generic portion (those that are the same on all
* platforms) of Tcl's dynamic loading facilities.
*
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
*
* 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.19 2008/10/04 12:54:14 nijtmans Exp $
*/
#include "tclInt.h"
/*
* The following structure describes a package that has been loaded either
* dynamically (with the "load" command) or statically (as indicated by a call
|
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
|
*/
if (pkgPtr->fileName[0] != '\0') {
Tcl_FSUnloadFileProc *unLoadProcPtr = pkgPtr->unLoadProcPtr;
if (unLoadProcPtr != NULL) {
Tcl_MutexLock(&packageMutex);
unLoadProcPtr(pkgPtr->loadHandle);
/*
* Remove this library from the loaded library cache.
*/
defaultPtr = pkgPtr;
if (defaultPtr == firstPackagePtr) {
|
>
|
>
|
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
|
*/
if (pkgPtr->fileName[0] != '\0') {
Tcl_FSUnloadFileProc *unLoadProcPtr = pkgPtr->unLoadProcPtr;
if (unLoadProcPtr != NULL) {
Tcl_MutexLock(&packageMutex);
if (pkgPtr->unloadProc != NULL) {
unLoadProcPtr(pkgPtr->loadHandle);
}
/*
* Remove this library from the loaded library cache.
*/
defaultPtr = pkgPtr;
if (defaultPtr == firstPackagePtr) {
|
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
|
* Some Unix dlls are poorly behaved - registering things like atexit
* calls that can't be unregistered. If you unload such dlls, you get
* a core on exit because it wants to call a function in the dll after
* it has been unloaded.
*/
if (pkgPtr->fileName[0] != '\0') {
if (pkgPtr->unLoadProcPtr != NULL) {
pkgPtr->unLoadProcPtr(pkgPtr->loadHandle);
}
}
#endif
ckfree(pkgPtr->fileName);
ckfree(pkgPtr->packageName);
|
|
|
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
|
* Some Unix dlls are poorly behaved - registering things like atexit
* calls that can't be unregistered. If you unload such dlls, you get
* a core on exit because it wants to call a function in the dll after
* it has been unloaded.
*/
if (pkgPtr->fileName[0] != '\0') {
if ((pkgPtr->unLoadProcPtr != NULL) && (pkgPtr->unloadProc != NULL)) {
pkgPtr->unLoadProcPtr(pkgPtr->loadHandle);
}
}
#endif
ckfree(pkgPtr->fileName);
ckfree(pkgPtr->packageName);
|