VirtualBox

Changeset 66740 in vbox for trunk


Ignore:
Timestamp:
May 2, 2017 6:45:22 AM (7 years ago)
Author:
vboxsync
Message:

vfsbase.cpp: retain debug

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/mangling.h

    r66735 r66740  
    23012301# define RTVfsDirRelease                                RT_MANGLER(RTVfsDirRelease)
    23022302# define RTVfsDirRetain                                 RT_MANGLER(RTVfsDirRetain)
     2303# define RTVfsDirRetainDebug                            RT_MANGLER(RTVfsDirRetainDebug)
    23032304# define RTVfsDirOpen                                   RT_MANGLER(RTVfsDirOpen)
    23042305# define RTVfsDirOpenDir                                RT_MANGLER(RTVfsDirOpenDir)
     
    23162317# define RTVfsFileRelease                               RT_MANGLER(RTVfsFileRelease)
    23172318# define RTVfsFileRetain                                RT_MANGLER(RTVfsFileRetain)
     2319# define RTVfsFileRetainDebug                           RT_MANGLER(RTVfsFileRetainDebug)
    23182320# define RTVfsFileSeek                                  RT_MANGLER(RTVfsFileSeek)
    23192321# define RTVfsFileSgRead                                RT_MANGLER(RTVfsFileSgRead)
     
    23272329# define RTVfsFsStrmRelease                             RT_MANGLER(RTVfsFsStrmRelease)
    23282330# define RTVfsFsStrmRetain                              RT_MANGLER(RTVfsFsStrmRetain)
     2331# define RTVfsFsStrmRetainDebug                         RT_MANGLER(RTVfsFsStrmRetainDebug)
    23292332# define RTVfsIoStreamToPrivate                         RT_MANGLER(RTVfsIoStreamToPrivate)
    23302333# define RTVfsIoStrmFlush                               RT_MANGLER(RTVfsIoStrmFlush)
     
    23432346# define RTVfsIoStrmRelease                             RT_MANGLER(RTVfsIoStrmRelease)
    23442347# define RTVfsIoStrmRetain                              RT_MANGLER(RTVfsIoStrmRetain)
     2348# define RTVfsIoStrmRetainDebug                         RT_MANGLER(RTVfsIoStrmRetainDebug)
    23452349# define RTVfsIoStrmSgRead                              RT_MANGLER(RTVfsIoStrmSgRead)
    23462350# define RTVfsIoStrmSgWrite                             RT_MANGLER(RTVfsIoStrmSgWrite)
     
    23592363# define RTVfsLockReleaseWriteSlow                      RT_MANGLER(RTVfsLockReleaseWriteSlow)
    23602364# define RTVfsLockRetain                                RT_MANGLER(RTVfsLockRetain)
     2365# define RTVfsLockRetainDebug                           RT_MANGLER(RTVfsLockRetainDebug)
    23612366# define RTVfsMemFileCreate                             RT_MANGLER(RTVfsMemFileCreate)
    23622367# define RTVfsMemorizeIoStreamAsFile                    RT_MANGLER(RTVfsMemorizeIoStreamAsFile)
     
    23772382# define RTVfsObjRelease                                RT_MANGLER(RTVfsObjRelease)
    23782383# define RTVfsObjRetain                                 RT_MANGLER(RTVfsObjRetain)
     2384# define RTVfsObjRetainDebug                            RT_MANGLER(RTVfsObjRetainDebug)
    23792385# define RTVfsObjToDir                                  RT_MANGLER(RTVfsObjToDir)
    23802386# define RTVfsObjToFile                                 RT_MANGLER(RTVfsObjToFile)
     
    23902396# define RTVfsOpenRoot                                  RT_MANGLER(RTVfsOpenRoot)
    23912397# define RTVfsRetain                                    RT_MANGLER(RTVfsRetain)
     2398# define RTVfsRetainDebug                               RT_MANGLER(RTVfsRetainDebug)
    23922399# define RTVfsSymlinkQueryInfo                          RT_MANGLER(RTVfsSymlinkQueryInfo)
    23932400# define RTVfsSymlinkRead                               RT_MANGLER(RTVfsSymlinkRead)
    23942401# define RTVfsSymlinkRelease                            RT_MANGLER(RTVfsSymlinkRelease)
    23952402# define RTVfsSymlinkRetain                             RT_MANGLER(RTVfsSymlinkRetain)
     2403# define RTVfsSymlinkRetainDebug                        RT_MANGLER(RTVfsSymlinkRetainDebug)
    23962404# define RTVfsSymlinkSetMode                            RT_MANGLER(RTVfsSymlinkSetMode)
    23972405# define RTVfsSymlinkSetOwner                           RT_MANGLER(RTVfsSymlinkSetOwner)
  • trunk/include/iprt/vfs.h

    r66616 r66740  
    110110 */
    111111RTDECL(int)         RTVfsCreate(const char *pszName, uint32_t fFlags, PRTVFS phVfs);
    112 RTDECL(uint32_t)    RTVfsRetain(RTVFS phVfs);
    113 RTDECL(uint32_t)    RTVfsRelease(RTVFS phVfs);
     112RTDECL(uint32_t)    RTVfsRetain(RTVFS hVfs);
     113RTDECL(uint32_t)    RTVfsRetainDebug(RTVFS hVfs, RT_SRC_POS_DECL);
     114RTDECL(uint32_t)    RTVfsRelease(RTVFS hVfs);
    114115RTDECL(int)         RTVfsAttach(RTVFS hVfs, const char *pszMountPoint, uint32_t fFlags, RTVFS hVfsAttach);
    115116RTDECL(int)         RTVfsDetach(RTVFS hVfs, const char *pszMountPoint, RTVFS hVfsToDetach, PRTVFS *phVfsDetached);
     
    141142 */
    142143RTDECL(uint32_t)        RTVfsObjRetain(RTVFSOBJ hVfsObj);
     144RTDECL(uint32_t)        RTVfsObjRetainDebug(RTVFSOBJ hVfsObj, RT_SRC_POS_DECL);
    143145
    144146/**
     
    275277
    276278RTDECL(uint32_t)    RTVfsFsStrmRetain(RTVFSFSSTREAM hVfsFss);
     279RTDECL(uint32_t)    RTVfsFsStrmRetainDebug(RTVFSFSSTREAM hVfsFss, RT_SRC_POS_DECL);
    277280RTDECL(uint32_t)    RTVfsFsStrmRelease(RTVFSFSSTREAM hVfsFss);
    278281RTDECL(int)         RTVfsFsStrmQueryInfo(RTVFSFSSTREAM hVfsFss, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr);
     
    321324 */
    322325RTDECL(uint32_t)    RTVfsDirRetain(RTVFSDIR hVfsDir);
     326RTDECL(uint32_t)    RTVfsDirRetainDebug(RTVFSDIR hVfsDir, RT_SRC_POS_DECL);
    323327
    324328/**
     
    390394 */
    391395RTDECL(uint32_t)    RTVfsSymlinkRetain(RTVFSSYMLINK hVfsSym);
     396RTDECL(uint32_t)    RTVfsSymlinkRetainDebug(RTVFSSYMLINK hVfsSym, RT_SRC_POS_DECL);
    392397
    393398/**
     
    543548 */
    544549RTDECL(uint32_t)    RTVfsIoStrmRetain(RTVFSIOSTREAM hVfsIos);
     550RTDECL(uint32_t)    RTVfsIoStrmRetainDebug(RTVFSIOSTREAM hVfsIos, RT_SRC_POS_DECL);
    545551
    546552/**
     
    857863 */
    858864RTDECL(uint32_t)    RTVfsFileRetain(RTVFSFILE hVfsFile);
     865RTDECL(uint32_t)    RTVfsFileRetainDebug(RTVFSFILE hVfsFile, RT_SRC_POS_DECL);
    859866
    860867/**
     
    10341041
    10351042
     1043#ifdef DEBUG
     1044# undef RTVfsRetain
     1045# define RTVfsRetain(hVfs)          RTVfsRetainDebug(hVfs, RT_SRC_POS)
     1046# undef RTVfsObjRetain
     1047# define RTVfsObjRetain(hVfsObj)    RTVfsObjRetainDebug(hVfsObj, RT_SRC_POS)
     1048# undef RTVfsDirRetain
     1049# define RTVfsDirRetain(hVfsDir)    RTVfsDirRetainDebug(hVfsDir, RT_SRC_POS)
     1050# undef RTVfsFileRetain
     1051# define RTVfsFileRetain(hVfsFile)  RTVfsFileRetainDebug(hVfsFile, RT_SRC_POS)
     1052# undef RTVfsIoStrmRetain
     1053# define RTVfsIoStrmRetain(hVfsIos) RTVfsIoStrmRetainDebug(hVfsIos, RT_SRC_POS)
     1054# undef RTVfsFsStrmRetain
     1055# define RTVfsFsStrmRetain(hVfsFss) RTVfsFsStrmRetainDebug(hVfsFss, RT_SRC_POS)
     1056#endif
     1057
     1058
     1059
    10361060/** @defgroup grp_vfs_misc          VFS Miscellaneous
    10371061 * @{
  • 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