diff options
| author | dgp@users.sourceforge.net <dgp> | 2012-06-22 17:06:42 (GMT) |
|---|---|---|
| committer | dgp@users.sourceforge.net <dgp> | 2012-06-22 17:06:42 (GMT) |
| commit | 9350a84aff91b114e76cc90908d21f33ad36abeb (patch) | |
| tree | a57115dece1197dd399f55be94fbe191faa22fb3 /generic/tclIOUtil.c | |
| parent | 0602f9fd25831fa14cd4650a79b4034d97188e31 (diff) | |
| parent | 67cce81c506fc1256470e0de9458564f099378af (diff) | |
| download | tcl-9350a84aff91b114e76cc90908d21f33ad36abeb.zip tcl-9350a84aff91b114e76cc90908d21f33ad36abeb.tar.gz tcl-9350a84aff91b114e76cc90908d21f33ad36abeb.tar.bz2 | |
merge 8.5
Diffstat (limited to 'generic/tclIOUtil.c')
| -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); |
