Changeset 2879 for trunk/src/lib/nt


Ignore:
Timestamp:
Sep 5, 2016, 10:14:21 PM (9 years ago)
Author:
bird
Message:

fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/nt/kFsCache.c

    r2872 r2879  
    414414        pHashEntry->fAbsolute       = fAbsolute;
    415415        pHashEntry->idxMissingGen   = (KU8)idxMissingGen;
    416         pHashEntry->pFsObj          = pFsObj;
    417416        pHashEntry->enmError        = enmError;
    418417        pHashEntry->pszPath         = (const char *)kHlpMemCopy(pHashEntry + 1, pszPath, cchPath + 1);
    419418        if (pFsObj)
    420             pHashEntry->uCacheGen = pFsObj->bObjType != KFSOBJ_TYPE_MISSING
    421                                   ? pCache->auGenerations[       pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN]
    422                                   : pCache->auGenerationsMissing[pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN];
    423         else if (enmError != KFSLOOKUPERROR_UNSUPPORTED)
    424             pHashEntry->uCacheGen = pCache->auGenerationsMissing[idxMissingGen];
     419        {
     420            pHashEntry->pFsObj      = kFsCacheObjRetainInternal(pFsObj);
     421            pHashEntry->uCacheGen   = pFsObj->bObjType != KFSOBJ_TYPE_MISSING
     422                                    ? pCache->auGenerations[       pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN]
     423                                    : pCache->auGenerationsMissing[pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN];
     424            pFsObj->abUnused[0] += 1; // for debugging
     425        }
    425426        else
    426             pHashEntry->uCacheGen = KFSOBJ_CACHE_GEN_IGNORE;
     427        {
     428            pHashEntry->pFsObj      = NULL;
     429            if (enmError != KFSLOOKUPERROR_UNSUPPORTED)
     430                pHashEntry->uCacheGen = pCache->auGenerationsMissing[idxMissingGen];
     431            else
     432                pHashEntry->uCacheGen = KFSOBJ_CACHE_GEN_IGNORE;
     433        }
    427434
    428435        pHashEntry->pNext = pCache->apAnsiPaths[idxHashTab];
     
    464471        pHashEntry->fAbsolute       = fAbsolute;
    465472        pHashEntry->idxMissingGen   = (KU8)idxMissingGen;
    466         pHashEntry->pFsObj          = pFsObj;
    467473        pHashEntry->enmError        = enmError;
    468474        pHashEntry->pwszPath        = (const wchar_t *)kHlpMemCopy(pHashEntry + 1, pwszPath, (cwcPath + 1) * sizeof(wchar_t));
    469475        if (pFsObj)
    470             pHashEntry->uCacheGen = pFsObj->bObjType != KFSOBJ_TYPE_MISSING
    471                                   ? pCache->auGenerations[       pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN]
    472                                   : pCache->auGenerationsMissing[pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN];
    473         else if (enmError != KFSLOOKUPERROR_UNSUPPORTED)
    474             pHashEntry->uCacheGen = pCache->auGenerationsMissing[idxMissingGen];
     476        {
     477            pHashEntry->pFsObj      = kFsCacheObjRetainInternal(pFsObj);
     478            pHashEntry->uCacheGen   = pFsObj->bObjType != KFSOBJ_TYPE_MISSING
     479                                    ? pCache->auGenerations[       pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN]
     480                                    : pCache->auGenerationsMissing[pFsObj->fFlags & KFSOBJ_F_USE_CUSTOM_GEN];
     481            pFsObj->abUnused[0] += 1; // for debugging
     482        }
    475483        else
    476             pHashEntry->uCacheGen = KFSOBJ_CACHE_GEN_IGNORE;
     484        {
     485            pHashEntry->pFsObj      = NULL;
     486            if (enmError != KFSLOOKUPERROR_UNSUPPORTED)
     487                pHashEntry->uCacheGen = pCache->auGenerationsMissing[idxMissingGen];
     488            else
     489                pHashEntry->uCacheGen = KFSOBJ_CACHE_GEN_IGNORE;
     490        }
    477491
    478492        pHashEntry->pNext = pCache->apUtf16Paths[idxHashTab];
     
    33643378
    33653379    KFSCACHE_LOG(("Destroying %s/%s, type=%d\n", pObj->pParent ? pObj->pParent->Obj.pszName : "", pObj->pszName, pObj->bObjType));
     3380    if (pObj->abUnused[1] != 0)
     3381    {
     3382        fprintf(stderr, "Destroying %s/%s, type=%d, path hash entries: %d!\n", pObj->pParent ? pObj->pParent->Obj.pszName : "",
     3383                pObj->pszName, pObj->bObjType, pObj->abUnused[0]);
     3384        __debugbreak();
     3385    }
    33663386
    33673387    /*
Note: See TracChangeset for help on using the changeset viewer.