Diff
Not logged in

Differences From Artifact [c4c9599b3d]:

To Artifact [4c6b936bd9]:


477
478
479
480
481
482
483

484
485
486
487
488
489
490
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491







+







     * Trash the filesystems cache.
     */

    fsRecPtr = tsdPtr->filesystemList;
    while (fsRecPtr != NULL) {
	tmpFsRecPtr = fsRecPtr->nextPtr;
	if (--fsRecPtr->fileRefCount <= 0) {
	    fsRecPtr->fsPtr = NULL;
	    ckfree((char *)fsRecPtr);
	}
	fsRecPtr = tmpFsRecPtr;
    }
    tsdPtr->initialized = 0;
}

584
585
586
587
588
589
590
591

592
593
594
595
596
597
598
599
600
601


602

603
604
605
606
607
608
609
585
586
587
588
589
590
591

592
593
594
595
596
597
598
599
600
601
602
603
604

605
606
607
608
609
610
611
612







-
+










+
+
-
+







    }
}

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.
     */

    fsRecPtr = tsdPtr->filesystemList;
    if (tsdPtr->claims <= 0) {
	while (fsRecPtr != NULL) {
	    tmpFsRecPtr = fsRecPtr->nextPtr;
	    if (--fsRecPtr->fileRefCount <= 0) {
		fsRecPtr->fsPtr = NULL;
		fsRecPtr->nextPtr = toFree;
		ckfree((char *)fsRecPtr);
		toFree = fsRecPtr;
	    }
	    fsRecPtr = tmpFsRecPtr;
	}
    } else {
	chain = fsRecPtr;
	while (fsRecPtr->nextPtr != NULL) {
	    fsRecPtr->prevPtr = fsRecPtr->nextPtr;
635
636
637
638
639
640
641






642
643
644
645
646
647
648
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657







+
+
+
+
+
+







	*tmpFsRecPtr = *fsRecPtr;
	tmpFsRecPtr->nextPtr = tsdPtr->filesystemList;
	tmpFsRecPtr->prevPtr = chain;
	chain = NULL;
	tsdPtr->filesystemList = tmpFsRecPtr;
	fsRecPtr = fsRecPtr->prevPtr;
    }

    while (toFree) {
	FilesystemRecord *next = toFree->nextPtr;
	ckfree((char *)toFree);
	toFree = next;
    }
    tsdPtr->filesystemEpoch = theFilesystemEpoch;
    Tcl_MutexUnlock(&filesystemMutex);

    /*
     * Make sure the above gets released on thread exit.
     */