VirtualBox

Changeset 2855 in kBuild


Ignore:
Timestamp:
Aug 31, 2016 9:21:22 PM (9 years ago)
Author:
bird
Message:

Updates

Location:
trunk/src/lib/nt
Files:
2 edited

Legend:

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

    r2854 r2855  
    695695#endif
    696696                          ;
    697     PKFSOBJ pObj = (PKFSOBJ)kHlpAlloc(cbObj);
     697    PKFSOBJ pObj;
     698    kHlpAssert(pCache->u32Magic == KFSCACHE_MAGIC);
     699
     700    pObj = (PKFSOBJ)kHlpAlloc(cbObj);
    698701    if (pObj)
    699702    {
     
    715718        pObj->fFlags        = pParent->Obj.fFlags;
    716719        pObj->pParent       = pParent;
     720        pObj->pUserDataHead = NULL;
    717721
    718722#ifdef KFSCACHE_CFG_UTF16
     
    21312135    KU32        idxHashTab = uHashPath % K_ELEMENTS(pCache->apAnsiPaths);
    21322136    PKFSHASHA   pHashEntry = pCache->apAnsiPaths[idxHashTab];
     2137    kHlpAssert(pCache->u32Magic == KFSCACHE_MAGIC);
    21332138    if (pHashEntry)
    21342139    {
     
    22202225    KU32        idxHashTab = uHashPath % K_ELEMENTS(pCache->apAnsiPaths);
    22212226    PKFSHASHW   pHashEntry = pCache->apUtf16Paths[idxHashTab];
     2227    kHlpAssert(pCache->u32Magic == KFSCACHE_MAGIC);
    22222228    if (pHashEntry)
    22232229    {
     
    22932299    kHlpAssert(pObj->cRefs == 0);
    22942300    kHlpAssert(pObj->pParent == NULL);
    2295 
     2301    kHlpAssert(pObj->u32Magic == KFSOBJ_MAGIC);
     2302
     2303    /*
     2304     * Invalidate the structure.
     2305     */
     2306    pObj->u32Magic = ~KFSOBJ_MAGIC;
     2307
     2308    /*
     2309     * Destroy any user data first.
     2310     */
     2311    while (pObj->pUserDataHead != NULL)
     2312    {
     2313        PKFSUSERDATA pUserData = pObj->pUserDataHead;
     2314        pObj->pUserDataHead = pUserData->pNext;
     2315        pUserData->pfnDestructor(pCache, pObj, pUserData);
     2316        kHlpFree(pUserData);
     2317    }
     2318
     2319    /*
     2320     * Do type specific destruction
     2321     */
    22962322    switch (pObj->bObjType)
    22972323    {
    22982324        case KFSOBJ_TYPE_MISSING:
    2299         //case KFSOBJ_TYPE_MISSING | KFSOBJ_TYPE_F_INVALID:
    23002325            /* nothing else to do here */
     2326            pCache->cbObjects -= sizeof(KFSDIR);
     2327            break;
     2328
     2329        case KFSOBJ_TYPE_DIR:
     2330        {
     2331            PKFSDIR pDir = (PKFSDIR)pObj;
     2332            KU32    cChildren = pDir->cChildren;
     2333            pCache->cbObjects -= sizeof(*pDir)
     2334                               + K_ALIGN_Z(cChildren, 16) * sizeof(pDir->papChildren)
     2335                               + pDir->cHashTab * sizeof(pDir->paHashTab);
     2336
     2337            pDir->cChildren   = 0;
     2338            while (cChildren-- > 0)
     2339                kFsCacheObjRelease(pCache, pDir->papChildren[cChildren]);
     2340            kHlpFree(pDir->papChildren);
     2341            pDir->papChildren = NULL;
     2342
     2343            kHlpFree(pDir->paHashTab);
     2344            pDir->paHashTab = NULL;
     2345            break;
     2346        }
     2347
     2348        case KFSOBJ_TYPE_FILE:
     2349        case KFSOBJ_TYPE_OTHER:
    23012350            pCache->cbObjects -= sizeof(*pObj);
    23022351            break;
    23032352
    2304         case KFSOBJ_TYPE_DIR:
    2305         //case KFSOBJ_TYPE_DIR | KFSOBJ_TYPE_F_INVALID:
    2306         case KFSOBJ_TYPE_FILE:
    2307         //case KFSOBJ_TYPE_FILE | KFSOBJ_TYPE_F_INVALID:
    2308             kHlpAssertFailed();
    2309             break;
    23102353        default:
    2311             kHlpAssertFailed();
    2312     }
     2354            return 0;
     2355    }
     2356
     2357    /*
     2358     * Common bits.
     2359     */
     2360    pCache->cbObjects -= pObj->cchName + 1;
     2361#ifdef KFSCACHE_CFG_UTF16
     2362    pCache->cbObjects -= (pObj->cwcName + 1) * sizeof(wchar_t);
     2363#endif
     2364#ifdef KFSCACHE_CFG_SHORT_NAMES
     2365    if (pObj->pszName != pObj->pszShortName)
     2366    {
     2367        pCache->cbObjects -= pObj->cchShortName + 1;
     2368# ifdef KFSCACHE_CFG_UTF16
     2369        pCache->cbObjects -= (pObj->cwcShortName + 1) * sizeof(wchar_t);
     2370# endif
     2371    }
     2372#endif
    23132373    pCache->cObjects--;
    2314     free(pObj);
     2374
     2375    kHlpFree(pObj);
    23152376    return 0;
    23162377}
     
    23262387KU32 kFsCacheObjRelease(PKFSCACHE pCache, PKFSOBJ pObj)
    23272388{
    2328     KU32 cRefs = --pObj->cRefs;
     2389    KU32 cRefs;
     2390    kHlpAssert(pCache->u32Magic == KFSCACHE_MAGIC);
     2391    kHlpAssert(pObj->u32Magic == KFSOBJ_MAGIC);
     2392
     2393    cRefs = --pObj->cRefs;
    23292394    if (cRefs)
    23302395        return cRefs;
     
    23412406KU32 kFsCacheObjRetain(PKFSOBJ pObj)
    23422407{
    2343     KU32 cRefs = ++pObj->cRefs;
     2408    KU32 cRefs;
     2409    kHlpAssert(pCache->u32Magic == KFSCACHE_MAGIC);
     2410    kHlpAssert(pObj->u32Magic == KFSOBJ_MAGIC);
     2411
     2412    cRefs = ++pObj->cRefs;
    23442413    kHlpAssert(cRefs < 16384);
    23452414    return cRefs;
  • trunk/src/lib/nt/kFsCache.h

    r2853 r2855  
    9595
    9696
     97/** Pointer to a cache. */
     98typedef struct KFSCACHE *PKFSCACHE;
    9799/** Pointer to a core object.  */
    98100typedef struct KFSOBJ *PKFSOBJ;
     
    116118    PKFSOBJ             pObj;
    117119} KFSOBJHASH;
     120
     121
     122/** Pointer to a user data item. */
     123typedef struct KFSUSERDATA *PKFSUSERDATA;
     124/**
     125 * User data item associated with a cache node.
     126 */
     127typedef struct KFSUSERDATA
     128{
     129    /** Pointer to the next piece of user data. */
     130    PKFSUSERDATA    pNext;
     131    /** The key identifying this user. */
     132    KUPTR           uKey;
     133    /** The destructor. */
     134    void (*pfnDestructor)(PKFSCACHE pCache, PKFSOBJ pObj, PKFSUSERDATA pData);
     135} KFSUSERDATA;
    118136
    119137
     
    180198#endif
    181199
     200    /** Pointer to the first user data item */
     201    PKFSUSERDATA        pUserDataHead;
     202
    182203    /** Stats - only valid when fHaveStats is set. */
    183204    BirdStat_T          Stats;
     
    317338
    318339
    319 /** Pointer to a cache.   */
    320 typedef struct KFSCACHE *PKFSCACHE;
    321340/**
    322341 * Directory cache instance.
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette