VirtualBox

Changeset 25604 in vbox


Ignore:
Timestamp:
Dec 31, 2009 2:25:17 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
56295
Message:

iprt: More deadlock hacking.

Location:
trunk/src/VBox/Runtime
Files:
7 edited

Legend:

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

    r25603 r25604  
    251251        RTAssertMsg1Weak("RTLockValidator", pSrcPos->uLine, pSrcPos->pszFile, pSrcPos->pszFunction);
    252252        if (pSrcPos->uId)
    253             RTAssertMsg2Weak("%s  [uId=%p thrd=%s]\n", pszWhat, pSrcPos->uId, VALID_PTR(pThreadSelf) ? pThreadSelf->szName : "<NIL>");
     253            RTAssertMsg2Weak("%s  [uId=%p  thrd=%s]\n", pszWhat, pSrcPos->uId, VALID_PTR(pThreadSelf) ? pThreadSelf->szName : "<NIL>");
    254254        else
    255255            RTAssertMsg2Weak("%s\n", pszWhat, pSrcPos->uId);
     
    14441444 *
    14451445 * @param   pStack          The chain of locks causing the deadlock.
     1446 * @param   pRec            The record relating to the current thread's lock
     1447 *                          operation.
    14461448 * @param   pThreadSelf     This thread.
    14471449 * @param   pSrcPos         Where we are going to deadlock.
    14481450 * @param   rc              The return code.
    14491451 */
    1450 static void rcLockValidatorDoDeadlockComplaining(PRTLOCKVALIDATORDDSTACK pStack, PRTTHREADINT pThreadSelf,
    1451                                                  PCRTLOCKVALIDATORSRCPOS pSrcPos, int rc)
     1452static void rcLockValidatorDoDeadlockComplaining(PRTLOCKVALIDATORDDSTACK pStack, PRTLOCKVALIDATORRECUNION pRec,
     1453                                                 PRTTHREADINT pThreadSelf, PCRTLOCKVALIDATORSRCPOS pSrcPos, int rc)
    14521454{
    14531455    if (!ASMAtomicUoReadBool(&g_fLockValidatorQuiet))
    14541456    {
    14551457        rtLockValidatorComplainFirst(  rc == VERR_SEM_LV_DEADLOCK
    1456                                      ? "deadlock"
     1458                                     ? "Detected deadlock!"
    14571459                                     : rc == VERR_SEM_LV_EXISTING_DEADLOCK
    1458                                      ? "existing-deadlock"
     1460                                     ? "Found existing deadlock!"
    14591461                                     : "!unexpected rc!",
    1460                                      pSrcPos, pThreadSelf, NULL);
    1461         rtLockValidatorComplainMore("---- start of %u entry deadlock chain ----\n", pStack->c);
     1462                                     pSrcPos,
     1463                                     pThreadSelf,
     1464                                     pStack->a[0].pRec != pRec ? pRec : NULL);
     1465        rtLockValidatorComplainMore("---- start of deadlock chain - %u entries ----\n", pStack->c);
    14621466        for (uint32_t i = 0; i < pStack->c; i++)
    14631467        {
    14641468            char szPrefix[24];
    1465             RTStrPrintf(szPrefix, sizeof(szPrefix), "#%u: ", i);
     1469            RTStrPrintf(szPrefix, sizeof(szPrefix), "#%02u: ", i);
    14661470            PRTLOCKVALIDATORSHAREDONE pSharedOne = NULL;
    14671471            if (pStack->a[i].pRec->Core.u32Magic == RTLOCKVALIDATORSHARED_MAGIC)
     
    15141518    }
    15151519
    1516     rcLockValidatorDoDeadlockComplaining(&Stack, pThreadSelf, pSrcPos, rc);
     1520    rcLockValidatorDoDeadlockComplaining(&Stack, pRec, pThreadSelf, pSrcPos, rc);
    15171521    return rc;
    15181522#else
  • trunk/src/VBox/Runtime/generic/critsect-generic.cpp

    r25491 r25604  
    6969    pCritSect->cLockers             = -1;
    7070    pCritSect->NativeThreadOwner    = NIL_RTNATIVETHREAD;
    71     int rc = RTLockValidatorRecCreate(&pCritSect->pValidatorRec, NIL_RTLOCKVALIDATORCLASS, 0, NULL, pCritSect);
     71    int rc = RTLockValidatorRecCreate(&pCritSect->pValidatorRec, NIL_RTLOCKVALIDATORCLASS, 0, "RTCritSect", pCritSect);
    7272    if (RT_SUCCESS(rc))
    7373    {
  • trunk/src/VBox/Runtime/r3/linux/semmutex-linux.cpp

    r25491 r25604  
    120120        pThis->cNesting = 0;
    121121#ifdef RTSEMMUTEX_STRICT
    122         RTLockValidatorRecInit(&pThis->ValidatorRec, NIL_RTLOCKVALIDATORCLASS, RTLOCKVALIDATOR_SUB_CLASS_NONE, NULL, pThis);
     122        RTLockValidatorRecInit(&pThis->ValidatorRec, NIL_RTLOCKVALIDATORCLASS, RTLOCKVALIDATOR_SUB_CLASS_NONE, "RTSemMutex", pThis);
    123123#endif
    124124
  • trunk/src/VBox/Runtime/r3/posix/semmutex-posix.cpp

    r25491 r25604  
    102102                pThis->u32Magic = RTSEMMUTEX_MAGIC;
    103103#ifdef RTSEMMUTEX_STRICT
    104                 RTLockValidatorRecInit(&pThis->ValidatorRec, NIL_RTLOCKVALIDATORCLASS, RTLOCKVALIDATOR_SUB_CLASS_NONE, NULL, pThis);
     104                RTLockValidatorRecInit(&pThis->ValidatorRec, NIL_RTLOCKVALIDATORCLASS, RTLOCKVALIDATOR_SUB_CLASS_NONE, "RTSemMutex", pThis);
    105105#endif
    106106
  • trunk/src/VBox/Runtime/r3/posix/semrw-posix.cpp

    r25602 r25604  
    119119                pThis->Writer       = (pthread_t)-1;
    120120#ifdef RTSEMRW_STRICT
    121                 RTLockValidatorRecInit(&pThis->ValidatorWrite, NIL_RTLOCKVALIDATORCLASS, RTLOCKVALIDATOR_SUB_CLASS_NONE, NULL, pThis);
    122                 RTLockValidatorSharedRecInit(&pThis->ValidatorRead,  NIL_RTLOCKVALIDATORCLASS, RTLOCKVALIDATOR_SUB_CLASS_NONE, NULL, pThis);
     121                RTLockValidatorRecInit(&pThis->ValidatorWrite, NIL_RTLOCKVALIDATORCLASS, RTLOCKVALIDATOR_SUB_CLASS_NONE, "RTSemRW", pThis);
     122                RTLockValidatorSharedRecInit(&pThis->ValidatorRead,  NIL_RTLOCKVALIDATORCLASS, RTLOCKVALIDATOR_SUB_CLASS_NONE, "RTSemRW", pThis);
    123123                RTLockValidatorMakeSiblings(&pThis->ValidatorWrite.Core, &pThis->ValidatorRead.Core);
    124124#endif
  • trunk/src/VBox/Runtime/r3/win/semmutex-win.cpp

    r25491 r25604  
    8787            pThis->hMtx = hMtx;
    8888#ifdef RTSEMMUTEX_STRICT
    89             RTLockValidatorRecInit(&pThis->ValidatorRec,  NIL_RTLOCKVALIDATORCLASS, RTLOCKVALIDATOR_SUB_CLASS_NONE, NULL, pThis);
     89            RTLockValidatorRecInit(&pThis->ValidatorRec,  NIL_RTLOCKVALIDATORCLASS, RTLOCKVALIDATOR_SUB_CLASS_NONE, "RTSemMutex", pThis);
    9090#endif
    9191            *pMutexSem = pThis;
  • trunk/src/VBox/Runtime/testcase/tstDeadlock.cpp

    r25602 r25604  
    136136    for (i = 0; i < cThreads && RT_SUCCESS(rc); i++)
    137137        RTTEST_CHECK_RC_OK(g_hTest, rc = RTThreadCreateF(&g_ahThreads[i], test1Thread, (void *)(uintptr_t)i, 0,
    138                                                          RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "test1-%u", i));
     138                                                         RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "test1-%02u", i));
    139139    if (RT_SUCCESS(rc))
    140140    {
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