VirtualBox

Ignore:
Timestamp:
May 2, 2017 6:45:22 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
115144
Message:

vfsbase.cpp: retain debug

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/vfs/vfsbase.cpp

    r66738 r66740  
    363363    uint32_t cRefs = ASMAtomicIncU32(&pThis->cRefs);
    364364    AssertMsg(cRefs > 1 && cRefs < _1M, ("%#x %p %d\n", cRefs, pThis, pThis->enmType));
     365    return cRefs;
     366}
     367
     368
     369RTDECL(uint32_t) RTVfsLockRetainDebug(RTVFSLOCK hLock, RT_SRC_POS_DECL)
     370{
     371    RTVFSLOCKINTERNAL *pThis = hLock;
     372    AssertPtrReturn(pThis, UINT32_MAX);
     373    AssertReturn(pThis->enmType > RTVFSLOCKTYPE_INVALID && pThis->enmType < RTVFSLOCKTYPE_END, UINT32_MAX);
     374
     375    uint32_t cRefs = ASMAtomicIncU32(&pThis->cRefs);
     376    AssertMsg(cRefs > 1 && cRefs < _1M, ("%#x %p %d\n", cRefs, pThis, pThis->enmType));
     377    LogFlow(("RTVfsLockRetainDebug(%p) -> %d;  caller: %s %s(%u)\n", hLock, cRefs, pszFunction, pszFile, iLine));
     378    RT_SRC_POS_NOREF();
    365379    return cRefs;
    366380}
     
    783797}
    784798
    785 
     799/**
     800 * Internal object retainer that asserts sanity in strict builds.
     801 *
     802 * @returns The new reference count.
     803 * @param   pThis               The base object handle data.
     804 */
     805DECLINLINE(uint32_t) rtVfsObjRetainDebug(RTVFSOBJINTERNAL *pThis, const char *pszApi, RT_SRC_POS_DECL)
     806{
     807    uint32_t cRefs = ASMAtomicIncU32(&pThis->cRefs);
     808    AssertMsg(cRefs > 1 && cRefs < _1M,
     809              ("%#x %p ops=%p %s (%d)\n", cRefs, pThis, pThis->pOps, pThis->pOps->pszName, pThis->pOps->enmType));
     810    LogFlow(("%s(%p/%p) -> %2d;  caller: %s %s(%s) \n", pszApi, pThis, pThis->pvThis, cRefs, pszFunction, pszFile, iLine));
     811    RT_SRC_POS_NOREF(); RT_NOREF(pszApi);
     812    return cRefs;
     813}
     814
     815
     816#ifdef DEBUG
     817# undef RTVfsObjRetain
     818#endif
    786819RTDECL(uint32_t) RTVfsObjRetain(RTVFSOBJ hVfsObj)
    787820{
     
    791824
    792825    return rtVfsObjRetain(pThis);
     826}
     827#ifdef DEBUG
     828# define RTVfsObjRetain(hVfsObj)    RTVfsObjRetainDebug(hVfsObj, RT_SRC_POS)
     829#endif
     830
     831
     832RTDECL(uint32_t) RTVfsObjRetainDebug(RTVFSOBJ hVfsObj, RT_SRC_POS_DECL)
     833{
     834    RTVFSOBJINTERNAL *pThis = hVfsObj;
     835    AssertPtrReturn(pThis, UINT32_MAX);
     836    AssertReturn(pThis->uMagic == RTVFSOBJ_MAGIC, UINT32_MAX);
     837
     838    return rtVfsObjRetainDebug(pThis, "RTVfsObjRetainDebug", RT_SRC_POS_ARGS);
    793839}
    794840
     
    902948        {
    903949            rtVfsObjRetainVoid(pThis);
     950            LogFlow(("RTVfsObjToVfs(%p) -> %p\n", pThis, RT_FROM_MEMBER(pThis, RTVFSINTERNAL, Base)));
    904951            return RT_FROM_MEMBER(pThis, RTVFSINTERNAL, Base);
    905952        }
     
    10091056
    10101057        rtVfsObjRetainVoid(pThis);
     1058        LogFlow(("RTVfsObjFromVfs(%p) -> %p\n", hVfs, pThis));
    10111059        return pThis;
    10121060    }
     
    16871735}
    16881736
    1689 
     1737#ifdef DEBUG
     1738# undef RTVfsRetain
     1739#endif
    16901740RTDECL(uint32_t) RTVfsRetain(RTVFS hVfs)
    16911741{
     
    16961746    LogFlow(("RTVfsRetain(%p/%p) -> %d\n", pThis, pThis->Base.pvThis, cRefs));
    16971747    return cRefs;
     1748}
     1749#ifdef DEBUG
     1750# define RTVfsRetain(hVfs)          RTVfsRetainDebug(hVfs, RT_SRC_POS)
     1751#endif
     1752
     1753
     1754RTDECL(uint32_t) RTVfsRetainDebug(RTVFS hVfs, RT_SRC_POS_DECL)
     1755{
     1756    RTVFSINTERNAL *pThis = hVfs;
     1757    AssertPtrReturn(pThis, UINT32_MAX);
     1758    AssertReturn(pThis->uMagic == RTVFS_MAGIC, UINT32_MAX);
     1759    RT_SRC_POS_NOREF();
     1760    return rtVfsObjRetainDebug(&pThis->Base, "RTVfsRetainDebug", RT_SRC_POS_ARGS);
    16981761}
    16991762
     
    18061869
    18071870
     1871#ifdef DEBUG
     1872# undef RTVfsFsStrmRetain
     1873#endif
    18081874RTDECL(uint32_t)    RTVfsFsStrmRetain(RTVFSFSSTREAM hVfsFss)
    18091875{
     
    18121878    AssertReturn(pThis->uMagic == RTVFSFSSTREAM_MAGIC, UINT32_MAX);
    18131879    return rtVfsObjRetain(&pThis->Base);
     1880}
     1881#ifdef DEBUG
     1882# define RTVfsFsStrmRetain(hVfsFss) RTVfsFsStrmRetainDebug(hVfsFss, RT_SRC_POS)
     1883#endif
     1884
     1885
     1886RTDECL(uint32_t)    RTVfsFsStrmRetainDebug(RTVFSFSSTREAM hVfsFss, RT_SRC_POS_DECL)
     1887{
     1888    RTVFSFSSTREAMINTERNAL *pThis = hVfsFss;
     1889    AssertPtrReturn(pThis, UINT32_MAX);
     1890    AssertReturn(pThis->uMagic == RTVFSFSSTREAM_MAGIC, UINT32_MAX);
     1891    return rtVfsObjRetainDebug(&pThis->Base, "RTVfsFsStrmRetain", RT_SRC_POS_ARGS);
    18141892}
    18151893
     
    19091987
    19101988
     1989#ifdef DEBUG
     1990# undef RTVfsDirRetain
     1991#endif
    19111992RTDECL(uint32_t) RTVfsDirRetain(RTVFSDIR hVfsDir)
    19121993{
     
    19171998    LogFlow(("RTVfsDirRetain(%p/%p) -> %#x\n", pThis, pThis->Base.pvThis, cRefs));
    19181999    return cRefs;
     2000}
     2001#ifdef DEBUG
     2002# define RTVfsDirRetain(hVfsDir)    RTVfsDirRetainDebug(hVfsDir, RT_SRC_POS)
     2003#endif
     2004
     2005
     2006RTDECL(uint32_t) RTVfsDirRetainDebug(RTVFSDIR hVfsDir, RT_SRC_POS_DECL)
     2007{
     2008    RTVFSDIRINTERNAL *pThis = hVfsDir;
     2009    AssertPtrReturn(pThis, UINT32_MAX);
     2010    AssertReturn(pThis->uMagic == RTVFSDIR_MAGIC, UINT32_MAX);
     2011    return rtVfsObjRetainDebug(&pThis->Base, "RTVfsDirRetain", RT_SRC_POS_ARGS);
    19192012}
    19202013
     
    21492242
    21502243
     2244RTDECL(uint32_t)    RTVfsSymlinkRetainDebug(RTVFSSYMLINK hVfsSym, RT_SRC_POS_DECL)
     2245{
     2246    RTVFSSYMLINKINTERNAL *pThis = hVfsSym;
     2247    AssertPtrReturn(pThis, UINT32_MAX);
     2248    AssertReturn(pThis->uMagic == RTVFSSYMLINK_MAGIC, UINT32_MAX);
     2249    return rtVfsObjRetainDebug(&pThis->Base, "RTVfsSymlinkRetainDebug", RT_SRC_POS_ARGS);
     2250}
     2251
     2252
    21512253RTDECL(uint32_t)    RTVfsSymlinkRelease(RTVFSSYMLINK hVfsSym)
    21522254{
     
    22962398
    22972399
     2400#ifdef DEBUG
     2401# undef RTVfsIoStrmRetain
     2402#endif
    22982403RTDECL(uint32_t)    RTVfsIoStrmRetain(RTVFSIOSTREAM hVfsIos)
    22992404{
     
    23022407    AssertReturn(pThis->uMagic == RTVFSIOSTREAM_MAGIC, UINT32_MAX);
    23032408    return rtVfsObjRetain(&pThis->Base);
     2409}
     2410#ifdef DEBUG
     2411# define RTVfsIoStrmRetain(hVfsIos) RTVfsIoStrmRetainDebug(hVfsIos, RT_SRC_POS)
     2412#endif
     2413
     2414
     2415RTDECL(uint32_t)    RTVfsIoStrmRetainDebug(RTVFSIOSTREAM hVfsIos, RT_SRC_POS_DECL)
     2416{
     2417    RTVFSIOSTREAMINTERNAL *pThis = hVfsIos;
     2418    AssertPtrReturn(pThis, UINT32_MAX);
     2419    AssertReturn(pThis->uMagic == RTVFSIOSTREAM_MAGIC, UINT32_MAX);
     2420    return rtVfsObjRetainDebug(&pThis->Base, "RTVfsIoStrmRetainDebug", RT_SRC_POS_ARGS);
    23042421}
    23052422
     
    27862903
    27872904
     2905#ifdef DEBUG
     2906# undef RTVfsFileRetain
     2907#endif
    27882908RTDECL(uint32_t)    RTVfsFileRetain(RTVFSFILE hVfsFile)
    27892909{
     
    27922912    AssertReturn(pThis->uMagic == RTVFSFILE_MAGIC, UINT32_MAX);
    27932913    return rtVfsObjRetain(&pThis->Stream.Base);
     2914}
     2915#ifdef DEBUG
     2916# define RTVfsFileRetain(hVfsFile)  RTVfsFileRetainDebug(hVfsFile, RT_SRC_POS)
     2917#endif
     2918
     2919
     2920RTDECL(uint32_t)    RTVfsFileRetainDebug(RTVFSFILE hVfsFile, RT_SRC_POS_DECL)
     2921{
     2922    RTVFSFILEINTERNAL *pThis = hVfsFile;
     2923    AssertPtrReturn(pThis, UINT32_MAX);
     2924    AssertReturn(pThis->uMagic == RTVFSFILE_MAGIC, UINT32_MAX);
     2925    return rtVfsObjRetainDebug(&pThis->Stream.Base, "RTVFsFileRetainDebug", RT_SRC_POS_ARGS);
    27942926}
    27952927
Note: See TracChangeset for help on using the changeset viewer.

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