diff options
author | dgp <dgp@users.sourceforge.net> | 2012-06-22 17:06:42 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2012-06-22 17:06:42 (GMT) |
commit | 1f0d829593900bd0a1c92616dc4525d308739a02 (patch) | |
tree | a57115dece1197dd399f55be94fbe191faa22fb3 /generic | |
parent | 057f1e5bbc5626a59f89416bc5d446834bd7fd87 (diff) | |
parent | bda5eebce5e42f7ad511bbf22e252a9cb9a7d044 (diff) | |
download | tcl-1f0d829593900bd0a1c92616dc4525d308739a02.zip tcl-1f0d829593900bd0a1c92616dc4525d308739a02.tar.gz tcl-1f0d829593900bd0a1c92616dc4525d308739a02.tar.bz2 |
merge 8.5
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclIOUtil.c | 13 |
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); |