summaryrefslogtreecommitdiffstats
path: root/generic/tclIOUtil.c
diff options
context:
space:
mode:
authordgp@users.sourceforge.net <dgp>2012-06-22 17:06:42 (GMT)
committerdgp@users.sourceforge.net <dgp>2012-06-22 17:06:42 (GMT)
commit9350a84aff91b114e76cc90908d21f33ad36abeb (patch)
treea57115dece1197dd399f55be94fbe191faa22fb3 /generic/tclIOUtil.c
parent0602f9fd25831fa14cd4650a79b4034d97188e31 (diff)
parent67cce81c506fc1256470e0de9458564f099378af (diff)
downloadtcl-9350a84aff91b114e76cc90908d21f33ad36abeb.zip
tcl-9350a84aff91b114e76cc90908d21f33ad36abeb.tar.gz
tcl-9350a84aff91b114e76cc90908d21f33ad36abeb.tar.bz2
merge 8.5
Diffstat (limited to 'generic/tclIOUtil.c')
-rw-r--r--generic/tclIOUtil.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c
index 117fab3..d397a16 100644
--- a/generic/tclIOUtil.c
+++ b/generic/tclIOUtil.c
@@ -481,6 +481,7 @@ FsThrExitProc(
while (fsRecPtr != NULL) {
tmpFsRecPtr = fsRecPtr->nextPtr;
if (--fsRecPtr->fileRefCount <= 0) {
+ fsRecPtr->fsPtr = NULL;
ckfree((char *)fsRecPtr);
}
fsRecPtr = tmpFsRecPtr;
@@ -588,7 +589,7 @@ static void
FsRecacheFilesystemList(void)
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&tclFsDataKey);
- FilesystemRecord *fsRecPtr, *tmpFsRecPtr = NULL, *chain = NULL;
+ FilesystemRecord *fsRecPtr, *tmpFsRecPtr = NULL, *toFree = NULL, *chain = NULL;
/*
* Trash the current cache.
@@ -599,7 +600,9 @@ FsRecacheFilesystemList(void)
while (fsRecPtr != NULL) {
tmpFsRecPtr = fsRecPtr->nextPtr;
if (--fsRecPtr->fileRefCount <= 0) {
- ckfree((char *)fsRecPtr);
+ fsRecPtr->fsPtr = NULL;
+ fsRecPtr->nextPtr = toFree;
+ toFree = fsRecPtr;
}
fsRecPtr = tmpFsRecPtr;
}
@@ -639,6 +642,12 @@ FsRecacheFilesystemList(void)
tsdPtr->filesystemList = tmpFsRecPtr;
fsRecPtr = fsRecPtr->prevPtr;
}
+
+ while (toFree) {
+ FilesystemRecord *next = toFree->nextPtr;
+ ckfree((char *)toFree);
+ toFree = next;
+ }
tsdPtr->filesystemEpoch = theFilesystemEpoch;
Tcl_MutexUnlock(&filesystemMutex);