VirtualBox

Ignore:
Timestamp:
Jan 10, 2010 8:12:30 PM (15 years ago)
Author:
vboxsync
Message:

iprt,pdmcritsect: More flexible lock naming, added RTCritSectSetSubClass and made some RTCritSectInitEx.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/misc/lockvalidator.cpp

    r25703 r25704  
    509509#else
    510510            RTAssertMsg2AddWeak("%s%p %s own=%s nest=%u pos={%Rbn(%u) %Rfn %p}%s%s", pszPrefix,
    511                                 pRec->Excl.hLock, pRec->Excl.pszName,
     511                                pRec->Excl.hLock, pRec->Excl.szName,
    512512                                rtLockValidatorNameThreadHandle(&pRec->Excl.hThread), cRecursion,
    513513                                pSrcPos->pszFile, pSrcPos->uLine, pSrcPos->pszFunction, pSrcPos->uId,
     
    518518        case RTLOCKVALRECSHRD_MAGIC:
    519519            RTAssertMsg2AddWeak("%s%p %s srec=%p%s", pszPrefix,
    520                                 pRec->Shared.hLock, pRec->Shared.pszName, pRec,
     520                                pRec->Shared.hLock, pRec->Shared.szName, pRec,
    521521                                pszSuffix);
    522522            break;
     
    535535#else
    536536                RTAssertMsg2AddWeak("%s%p %s thr=%s nest=%u pos={%Rbn(%u) %Rfn %p}%s%s", pszPrefix,
    537                                     pShared->hLock, pShared->pszName,
     537                                    pShared->hLock, pShared->szName,
    538538                                    rtLockValidatorNameThreadHandle(&pRec->ShrdOwner.hThread), cRecursion,
    539539                                    pSrcPos->pszFile, pSrcPos->uLine, pSrcPos->pszFunction, pSrcPos->uId,
     
    10241024
    10251025
    1026 RTDECL(int) RTLockValidatorClassCreate(PRTLOCKVALCLASS phClass, bool fAutodidact, RT_SRC_POS_DECL)
     1026RTDECL(int) RTLockValidatorClassCreate(PRTLOCKVALCLASS phClass, bool fAutodidact, RT_SRC_POS_DECL, const char *pszNameFmt, ...)
    10271027{
    10281028    RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_POS_NO_ID();
    1029     return RTLockValidatorClassCreateEx(phClass, &SrcPos,
    1030                                         fAutodidact, true /*fRecursionOk*/, false /*fStrictReleaseOrder*/,
    1031                                         1 /*cMsMinDeadlock*/, 1 /*cMsMinOrder*/,
    1032                                         NULL /*pszName*/);
     1029    va_list va;
     1030    va_start(va, pszNameFmt);
     1031    int rc = RTLockValidatorClassCreateExV(phClass, &SrcPos,
     1032                                           fAutodidact, true /*fRecursionOk*/, false /*fStrictReleaseOrder*/,
     1033                                           1 /*cMsMinDeadlock*/, 1 /*cMsMinOrder*/,
     1034                                           pszNameFmt, va);
     1035    va_end(va);
     1036    return rc;
    10331037}
    10341038
     
    14561460    {
    14571461        case RTLOCKVALRECEXCL_MAGIC:
    1458             return pRec->Excl.pszName;
     1462            return pRec->Excl.szName;
    14591463        case RTLOCKVALRECSHRD_MAGIC:
    1460             return pRec->Shared.pszName;
     1464            return pRec->Shared.szName;
    14611465        case RTLOCKVALRECSHRDOWN_MAGIC:
    1462             return pRec->ShrdOwner.pSharedRec ? pRec->ShrdOwner.pSharedRec->pszName : "orphaned";
     1466            return pRec->ShrdOwner.pSharedRec ? pRec->ShrdOwner.pSharedRec->szName : "orphaned";
    14631467        case RTLOCKVALRECNEST_MAGIC:
    14641468            pRec = rtLockValidatorReadRecUnionPtr(&pRec->Nest.pRec);
     
    14681472                {
    14691473                    case RTLOCKVALRECEXCL_MAGIC:
    1470                         return pRec->Excl.pszName;
     1474                        return pRec->Excl.szName;
    14711475                    case RTLOCKVALRECSHRD_MAGIC:
    1472                         return pRec->Shared.pszName;
     1476                        return pRec->Shared.szName;
    14731477                    case RTLOCKVALRECSHRDOWN_MAGIC:
    1474                         return pRec->ShrdOwner.pSharedRec ? pRec->ShrdOwner.pSharedRec->pszName : "orphaned";
     1478                        return pRec->ShrdOwner.pSharedRec ? pRec->ShrdOwner.pSharedRec->szName : "orphaned";
    14751479                    default:
    14761480                        return "unknown-nested";
     
    27982802
    27992803
    2800 RTDECL(void) RTLockValidatorRecExclInit(PRTLOCKVALRECEXCL pRec, RTLOCKVALCLASS hClass, uint32_t uSubClass,
    2801                                         const char *pszName, void *hLock, bool fEnabled)
     2804RTDECL(void) RTLockValidatorRecExclInitV(PRTLOCKVALRECEXCL pRec, RTLOCKVALCLASS hClass, uint32_t uSubClass,
     2805                                         void *hLock, bool fEnabled, const char *pszNameFmt, va_list va)
    28022806{
    28032807    RTLOCKVAL_ASSERT_PTR_ALIGN(pRec);
     
    28162820    pRec->cRecursion    = 0;
    28172821    pRec->hLock         = hLock;
    2818     pRec->pszName       = pszName;
    28192822    pRec->pSibling      = NULL;
     2823    if (pszNameFmt)
     2824        RTStrPrintfV(pRec->szName, sizeof(pRec->szName), pszNameFmt, va);
     2825    else
     2826    {
     2827        static uint32_t volatile s_cAnonymous = 0;
     2828        uint32_t i = ASMAtomicIncU32(&s_cAnonymous) - 1;
     2829        RTStrPrintf(pRec->szName, sizeof(pRec->szName), "anon-excl-%u", i);
     2830    }
    28202831
    28212832    /* Lazy initialization. */
     
    28252836
    28262837
    2827 RTDECL(int)  RTLockValidatorRecExclCreate(PRTLOCKVALRECEXCL *ppRec, RTLOCKVALCLASS hClass,
    2828                                           uint32_t uSubClass, const char *pszName, void *pvLock, bool fEnabled)
     2838RTDECL(void) RTLockValidatorRecExclInit(PRTLOCKVALRECEXCL pRec, RTLOCKVALCLASS hClass, uint32_t uSubClass,
     2839                                        void *hLock, bool fEnabled, const char *pszNameFmt, ...)
     2840{
     2841    va_list va;
     2842    va_start(va, pszNameFmt);
     2843    RTLockValidatorRecExclInitV(pRec, hClass, uSubClass, hLock, fEnabled, pszNameFmt, va);
     2844    va_end(va);
     2845}
     2846
     2847
     2848RTDECL(int)  RTLockValidatorRecExclCreateV(PRTLOCKVALRECEXCL *ppRec, RTLOCKVALCLASS hClass,
     2849                                           uint32_t uSubClass, void *pvLock, bool fEnabled,
     2850                                           const char *pszNameFmt, va_list va)
    28292851{
    28302852    PRTLOCKVALRECEXCL pRec;
     
    28322854    if (!pRec)
    28332855        return VERR_NO_MEMORY;
    2834 
    2835     RTLockValidatorRecExclInit(pRec, hClass, uSubClass, pszName, pvLock, fEnabled);
    2836 
     2856    RTLockValidatorRecExclInitV(pRec, hClass, uSubClass, pvLock, fEnabled, pszNameFmt, va);
    28372857    return VINF_SUCCESS;
     2858}
     2859
     2860
     2861RTDECL(int)  RTLockValidatorRecExclCreate(PRTLOCKVALRECEXCL *ppRec, RTLOCKVALCLASS hClass,
     2862                                          uint32_t uSubClass, void *pvLock, bool fEnabled,
     2863                                          const char *pszNameFmt, ...)
     2864{
     2865    va_list va;
     2866    va_start(va, pszNameFmt);
     2867    int rc = RTLockValidatorRecExclCreateV(ppRec, hClass, uSubClass, pvLock, fEnabled, pszNameFmt, va);
     2868    va_end(va);
     2869    return rc;
    28382870}
    28392871
     
    28662898        RTMemFree(pRec);
    28672899    }
     2900}
     2901
     2902
     2903RTDECL(uint32_t) RTLockValidatorRecExclSetSubClass(PRTLOCKVALRECEXCL pRec, uint32_t uSubClass)
     2904{
     2905    AssertPtrReturn(pRec, RTLOCKVAL_SUB_CLASS_INVALID);
     2906    AssertReturn(pRec->Core.u32Magic == RTLOCKVALRECEXCL_MAGIC, RTLOCKVAL_SUB_CLASS_INVALID);
     2907    AssertReturn(   uSubClass >= RTLOCKVAL_SUB_CLASS_USER
     2908                 || uSubClass == RTLOCKVAL_SUB_CLASS_NONE
     2909                 || uSubClass == RTLOCKVAL_SUB_CLASS_ANY,
     2910                 RTLOCKVAL_SUB_CLASS_INVALID);
     2911    return ASMAtomicXchgU32(&pRec->uSubClass, uSubClass);
    28682912}
    28692913
     
    31803224
    31813225
    3182 RTDECL(void) RTLockValidatorRecSharedInit(PRTLOCKVALRECSHRD pRec, RTLOCKVALCLASS hClass, uint32_t uSubClass,
    3183                                           const char *pszName, void *hLock, bool fSignaller, bool fEnabled)
     3226RTDECL(void) RTLockValidatorRecSharedInitV(PRTLOCKVALRECSHRD pRec, RTLOCKVALCLASS hClass, uint32_t uSubClass,
     3227                                           void *hLock, bool fSignaller, bool fEnabled, const char *pszNameFmt, va_list va)
    31843228{
    31853229    RTLOCKVAL_ASSERT_PTR_ALIGN(pRec);
     
    31903234    pRec->hClass        = rtLockValidatorClassValidateAndRetain(hClass);
    31913235    pRec->hLock         = hLock;
    3192     pRec->pszName       = pszName;
    31933236    pRec->fEnabled      = fEnabled && RTLockValidatorIsEnabled();
    31943237    pRec->fSignaller    = fSignaller;
     
    32023245    pRec->fPadding      = false;
    32033246    pRec->papOwners     = NULL;
    3204 #if HC_ARCH_BITS == 32
    3205     pRec->u32Alignment  = UINT32_MAX;
    3206 #endif
     3247
     3248    /* the name */
     3249    if (pszNameFmt)
     3250        RTStrPrintfV(pRec->szName, sizeof(pRec->szName), pszNameFmt, va);
     3251    else
     3252    {
     3253        static uint32_t volatile s_cAnonymous = 0;
     3254        uint32_t i = ASMAtomicIncU32(&s_cAnonymous) - 1;
     3255        RTStrPrintf(pRec->szName, sizeof(pRec->szName), "anon-shrd-%u", i);
     3256    }
     3257}
     3258
     3259
     3260RTDECL(void) RTLockValidatorRecSharedInit(PRTLOCKVALRECSHRD pRec, RTLOCKVALCLASS hClass, uint32_t uSubClass,
     3261                                          void *hLock, bool fSignaller, bool fEnabled, const char *pszNameFmt, ...)
     3262{
     3263    va_list va;
     3264    va_start(va, pszNameFmt);
     3265    RTLockValidatorRecSharedInitV(pRec, hClass, uSubClass, hLock, fSignaller, fEnabled, pszNameFmt, va);
     3266    va_end(va);
    32073267}
    32083268
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