VirtualBox

Ignore:
Timestamp:
Apr 4, 2020 10:46:18 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
136872
Message:

IPRT: Added RTMemFreeZ, RTMemTmpFreeZ, and RTMemEf* variants. bugref:9698

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r3/alloc-ef.cpp

    r83368 r83546  
    368368        PRTMEMBLOCK pBlock = rtmemBlockGet(pv);
    369369        if (pBlock)
    370             rtR3MemFree("r-free", RTMEMTYPE_RTMEMFREE, pv, ASMReturnAddress(), RT_SRC_POS);
     370            rtR3MemFree("r-free", RTMEMTYPE_RTMEMFREE, pv, 0, ASMReturnAddress(), RT_SRC_POS);
    371371        else
    372372            g_pfnOrgFree(pv);
     
    649649 * Internal free.
    650650 */
    651 RTDECL(void) rtR3MemFree(const char *pszOp, RTMEMTYPE enmType, void *pv, void *pvCaller, RT_SRC_POS_DECL)
     651RTDECL(void) rtR3MemFree(const char *pszOp, RTMEMTYPE enmType, void *pv, size_t cbUser, void *pvCaller, RT_SRC_POS_DECL)
    652652{
    653653    NOREF(enmType); RT_SRC_POS_NOREF();
     
    699699# endif
    700700
    701 # ifdef RTALLOC_EFENCE_FREE_FILL
    702701        /*
    703702         * Fill the user part of the block.
    704703         */
    705         memset(pv, RTALLOC_EFENCE_FREE_FILL, pBlock->cbUnaligned);
     704        AssertMsg(enmType != RTMEMTYPE_RTMEMFREEZ || cbUser == pBlock->cbUnaligned,
     705                  ("cbUser=%#zx cbUnaligned=%#zx\n", cbUser, pBlock->cbUnaligned));
     706        if (enmType == RTMEMTYPE_RTMEMFREEZ)
     707            RT_BZERO(pv, pBlock->cbUnaligned);
     708#ifdef RTALLOC_EFENCE_FREE_FILL
     709        else
     710            memset(pv, RTALLOC_EFENCE_FREE_FILL, pBlock->cbUnaligned);
    706711# endif
    707712
     
    790795    if (!cbNew)
    791796    {
    792         rtR3MemFree(pszOp, RTMEMTYPE_RTMEMREALLOC, pvOld, pvCaller, RT_SRC_POS_ARGS);
     797        rtR3MemFree(pszOp, RTMEMTYPE_RTMEMREALLOC, pvOld, 0, pvCaller, RT_SRC_POS_ARGS);
    793798        return NULL;
    794799    }
     
    806811        {
    807812            memcpy(pvRet, pvOld, RT_MIN(cbNew, pBlock->cbUnaligned));
    808             rtR3MemFree(pszOp, RTMEMTYPE_RTMEMREALLOC, pvOld, pvCaller, RT_SRC_POS_ARGS);
     813            rtR3MemFree(pszOp, RTMEMTYPE_RTMEMREALLOC, pvOld, 0, pvCaller, RT_SRC_POS_ARGS);
    809814        }
    810815        return pvRet;
     
    840845{
    841846    if (pv)
    842         rtR3MemFree("Free", RTMEMTYPE_RTMEMFREE, pv, ASMReturnAddress(), RT_SRC_POS_ARGS);
     847        rtR3MemFree("Free", RTMEMTYPE_RTMEMFREE, pv, 0, ASMReturnAddress(), RT_SRC_POS_ARGS);
     848}
     849
     850
     851RTDECL(void)    RTMemEfTmpFreeZ(void *pv, size_t cb, RT_SRC_POS_DECL) RT_NO_THROW_DEF
     852{
     853    if (pv)
     854        rtR3MemFree("FreeZ", RTMEMTYPE_RTMEMFREEZ, pv, cb, ASMReturnAddress(), RT_SRC_POS_ARGS);
    843855}
    844856
     
    896908{
    897909    if (pv)
    898         rtR3MemFree("Free", RTMEMTYPE_RTMEMFREE, pv, ASMReturnAddress(), RT_SRC_POS_ARGS);
     910        rtR3MemFree("Free", RTMEMTYPE_RTMEMFREE, pv, 0, ASMReturnAddress(), RT_SRC_POS_ARGS);
     911}
     912
     913
     914RTDECL(void)    RTMemEfFreeZ(void *pv, size_t cb, RT_SRC_POS_DECL) RT_NO_THROW_DEF
     915{
     916    if (pv)
     917        rtR3MemFree("FreeZ", RTMEMTYPE_RTMEMFREEZ, pv, cb, ASMReturnAddress(), RT_SRC_POS_ARGS);
    899918}
    900919
     
    946965{
    947966    if (pv)
    948         rtR3MemFree("Free", RTMEMTYPE_RTMEMFREE, pv, ASMReturnAddress(), NULL, 0, NULL);
     967        rtR3MemFree("Free", RTMEMTYPE_RTMEMFREE, pv, 0, ASMReturnAddress(), NULL, 0, NULL);
     968}
     969
     970
     971RTDECL(void)    RTMemEfTmpFreeZNP(void *pv, size_t cb) RT_NO_THROW_DEF
     972{
     973    if (pv)
     974        rtR3MemFree("FreeZ", RTMEMTYPE_RTMEMFREEZ, pv, cb, ASMReturnAddress(), NULL, 0, NULL);
    949975}
    950976
     
    10021028{
    10031029    if (pv)
    1004         rtR3MemFree("Free", RTMEMTYPE_RTMEMFREE, pv, ASMReturnAddress(), NULL, 0, NULL);
     1030        rtR3MemFree("Free", RTMEMTYPE_RTMEMFREE, pv, 0, ASMReturnAddress(), NULL, 0, NULL);
     1031}
     1032
     1033
     1034RTDECL(void)    RTMemEfFreeZNP(void *pv, size_t cb) RT_NO_THROW_DEF
     1035{
     1036    if (pv)
     1037        rtR3MemFree("Free", RTMEMTYPE_RTMEMFREEZ, pv, cb, ASMReturnAddress(), NULL, 0, NULL);
    10051038}
    10061039
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