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
     * Trash the filesystems cache.
     */

    fsRecPtr = tsdPtr->filesystemList;
    while (fsRecPtr != NULL) {
	tmpFsRecPtr = fsRecPtr->nextPtr;
	if (--fsRecPtr->fileRefCount <= 0) {

	    ckfree((char *)fsRecPtr);
	}
	fsRecPtr = tmpFsRecPtr;
    }
    tsdPtr->initialized = 0;
}








>







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
    }
}

static void
FsRecacheFilesystemList(void)
{
    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&tclFsDataKey);
    FilesystemRecord *fsRecPtr, *tmpFsRecPtr = NULL, *chain = NULL;

    /*
     * Trash the current cache.
     */

    fsRecPtr = tsdPtr->filesystemList;
    if (tsdPtr->claims <= 0) {
	while (fsRecPtr != NULL) {
	    tmpFsRecPtr = fsRecPtr->nextPtr;
	    if (--fsRecPtr->fileRefCount <= 0) {


		ckfree((char *)fsRecPtr);
	    }
	    fsRecPtr = tmpFsRecPtr;
	}
    } else {
	chain = fsRecPtr;
	while (fsRecPtr->nextPtr != NULL) {
	    fsRecPtr->prevPtr = fsRecPtr->nextPtr;







|










>
>
|







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, *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;
		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
	*tmpFsRecPtr = *fsRecPtr;
	tmpFsRecPtr->nextPtr = tsdPtr->filesystemList;
	tmpFsRecPtr->prevPtr = chain;
	chain = NULL;
	tsdPtr->filesystemList = tmpFsRecPtr;
	fsRecPtr = fsRecPtr->prevPtr;
    }






    tsdPtr->filesystemEpoch = theFilesystemEpoch;
    Tcl_MutexUnlock(&filesystemMutex);

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








>
>
>
>
>
>







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