VirtualBox

Ignore:
Timestamp:
Jun 9, 2010 12:14:59 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
62505
Message:

iprt/asm.h,*: Revised the ASMAtomic*Ptr functions and macros. The new saves lots of unsafe (void * volatile *) casts as well as adding some type safety when using GCC (typeof rulez).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/alloc/memcache.cpp

    r28800 r30111  
    308308
    309309            /* Make it the hint. */
    310             ASMAtomicWritePtr((void * volatile *)&pThis->pPageHint, pPage);
     310            ASMAtomicWritePtr(&pThis->pPageHint, pPage);
    311311
    312312            /* Link the page. */
    313313            PRTMEMCACHEPAGE pPrevPage = pThis->pPageHead;
    314314            if (!pPrevPage)
    315                 ASMAtomicWritePtr((void * volatile *)&pThis->pPageHead, pPage);
     315                ASMAtomicWritePtr(&pThis->pPageHead, pPage);
    316316            else
    317317            {
    318318                while (pPrevPage->pNext)
    319319                    pPrevPage = pPrevPage->pNext;
    320                 ASMAtomicWritePtr((void * volatile *)&pPrevPage->pNext, pPage);
     320                ASMAtomicWritePtr(&pPrevPage->pNext, pPage);
    321321            }
    322322
     
    359359     * Try grab a free object from the stack.
    360360     */
    361     PRTMEMCACHEFREEOBJ pObj = (PRTMEMCACHEFREEOBJ)ASMAtomicUoReadPtr((void * volatile *)&pThis->pFreeTop);
     361    PRTMEMCACHEFREEOBJ pObj = ASMAtomicUoReadPtrT(&pThis->pFreeTop, PRTMEMCACHEFREEOBJ);
    362362    if (pObj)
    363363    {
     
    365365        do
    366366        {
    367             pNext = (PRTMEMCACHEFREEOBJ)ASMAtomicUoReadPtr((void * volatile *)&pObj->pNext);
    368             if (ASMAtomicCmpXchgPtr((void * volatile *)&pThis->pFreeTop, pNext, pObj))
     367            pNext = ASMAtomicUoReadPtrT(&pObj->pNext, PRTMEMCACHEFREEOBJ);
     368            if (ASMAtomicCmpXchgPtr(&pThis->pFreeTop, pNext, pObj))
    369369            {
    370370                *ppvObj = pObj;
    371371                return VINF_SUCCESS;
    372372            }
    373             pObj = (PRTMEMCACHEFREEOBJ)ASMAtomicUoReadPtr((void * volatile *)&pThis->pFreeTop);
     373            pObj = ASMAtomicUoReadPtrT(&pThis->pFreeTop, PRTMEMCACHEFREEOBJ);
    374374        } while (pObj);
    375375    }
     
    400400     * Grab a free object at the page level.
    401401     */
    402     PRTMEMCACHEPAGE pPage = (PRTMEMCACHEPAGE)ASMAtomicReadPtr((void * volatile *)&pThis->pPageHint);
     402    PRTMEMCACHEPAGE pPage = ASMAtomicReadPtrT(&pThis->pPageHint, PRTMEMCACHEPAGE);
    403403    int32_t iObj = pPage ? rtMemCacheGrabObj(pPage) : -1;
    404404    if (iObj < 0)
     
    412412                {
    413413                    if (iObj > 0)
    414                         ASMAtomicWritePtr((void * volatile *)&pThis->pPageHint, pPage);
     414                        ASMAtomicWritePtr(&pThis->pPageHint, pPage);
    415415                    break;
    416416                }
     
    511511        do
    512512        {
    513             pNext = (PRTMEMCACHEFREEOBJ)ASMAtomicUoReadPtr((void * volatile *)&pThis->pFreeTop);
     513            pNext = ASMAtomicUoReadPtrT(&pThis->pFreeTop, PRTMEMCACHEFREEOBJ);
    514514            pObj->pNext = pNext;
    515         } while (!ASMAtomicCmpXchgPtr((void * volatile *)&pThis->pFreeTop, pObj, pNext));
     515        } while (!ASMAtomicCmpXchgPtr(&pThis->pFreeTop, pObj, pNext));
    516516    }
    517517    else
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