VirtualBox

Changeset 20575 in vbox for trunk/src/VBox/Runtime/generic


Ignore:
Timestamp:
Jun 15, 2009 1:52:07 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
48579
Message:

IPRT: Wrote the body for tstRTMemPool and fixed two isseus in mempool-generic.cpp: 1. messed up the linked list a little bit (as always). 2. don't assert on volatile pointers without owning the lock as someone else might change them while you're testing their validity and reading them multiple times.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/generic/mempool-generic.cpp

    r20561 r20575  
    109109        AssertPtrReturn(pEntry, (rc)); \
    110110        AssertPtrNullReturn((pEntry)->pMemPool, (rc)); \
     111        Assert((pEntry)->cRefs < UINT32_MAX / 2); \
    111112        AssertReturn((pEntry)->pMemPool->u32Magic == RTMEMPOOL_MAGIC, (rc)); \
    112         AssertPtrNull((pEntry)->pNext); \
    113         AssertPtrNull((pEntry)->pPrev); \
    114113    } while (0)
    115114
     
    179178    {
    180179        PRTMEMPOOLENTRY pFree = pEntry;
     180        Assert(pFree->cRefs > 0 && pFree->cRefs < UINT32_MAX / 2);
    181181        pEntry = pEntry->pNext;
    182182
     
    210210        if (pHead)
    211211            pHead->pPrev = pEntry;
    212         else
    213             pMemPool->pHead = pEntry;
     212        pMemPool->pHead = pEntry;
    214213
    215214        RTSpinlockRelease(pMemPool->hSpinLock, &Tmp);
     
    228227        RTSpinlockAcquire(pMemPool->hSpinLock, &Tmp);
    229228
    230         if (pEntry->pNext)
    231             pEntry->pNext->pPrev = pEntry->pPrev;
    232         if (pEntry->pPrev)
    233             pEntry->pPrev->pNext = pEntry->pNext;
     229        PRTMEMPOOLENTRY pNext = pEntry->pNext;
     230        PRTMEMPOOLENTRY pPrev = pEntry->pPrev;
     231        if (pNext)
     232            pNext->pPrev    = pPrev;
     233        if (pPrev)
     234            pPrev->pNext    = pNext;
    234235        else
    235             pMemPool->pHead      = pEntry->pNext;
     236            pMemPool->pHead = pNext;
    236237        pEntry->pMemPool = NULL;
    237238
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