VirtualBox

Changeset 25648 in vbox for trunk/src/VBox/Runtime/common


Ignore:
Timestamp:
Jan 5, 2010 2:32:58 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
56363
Message:

iprt: Instrumented semeventmulti-linux.cpp and hacked more on the validator and the testcase.

Location:
trunk/src/VBox/Runtime/common/misc
Files:
2 edited

Legend:

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

    r25645 r25648  
    12331233    rtLockValidatorCopySrcPos(&pThreadSelf->LockValidator.SrcPos, pSrcPos);
    12341234    ASMAtomicWriteBool(&pThreadSelf->LockValidator.fInValidator, true);
     1235    pThreadSelf->LockValidator.enmRecState = enmSleepState;
    12351236    rtThreadSetState(pThreadSelf, enmSleepState);
    12361237
     
    12601261        ASMAtomicWriteBool(&pThreadSelf->fReallySleeping, fReallySleeping);
    12611262    else
     1263    {
    12621264        rtThreadSetState(pThreadSelf, enmThreadState);
     1265        rtLockValidatorWriteRecUnionPtr(&pThreadSelf->LockValidator.pRec, NULL);
     1266    }
    12631267    ASMAtomicWriteBool(&pThreadSelf->LockValidator.fInValidator, false);
    12641268    return rc;
     
    14341438    rtLockValidatorCopySrcPos(&pThreadSelf->LockValidator.SrcPos, pSrcPos);
    14351439    ASMAtomicWriteBool(&pThreadSelf->LockValidator.fInValidator, true);
     1440    pThreadSelf->LockValidator.enmRecState = enmSleepState;
    14361441    rtThreadSetState(pThreadSelf, enmSleepState);
    14371442
     
    14611466        ASMAtomicWriteBool(&pThreadSelf->fReallySleeping, fReallySleeping);
    14621467    else
     1468    {
    14631469        rtThreadSetState(pThreadSelf, enmThreadState);
     1470        rtLockValidatorWriteRecUnionPtr(&pThreadSelf->LockValidator.pRec, NULL);
     1471    }
    14641472    ASMAtomicWriteBool(&pThreadSelf->LockValidator.fInValidator, false);
    14651473    return rc;
  • trunk/src/VBox/Runtime/common/misc/thread.cpp

    r25645 r25648  
    13341334        Assert(pThread == RTThreadSelf());
    13351335        ASMAtomicWriteBool(&pThread->fReallySleeping, false);
    1336         if (rtThreadGetState(pThread) == enmCurState)
     1336
     1337        RTTHREADSTATE enmActualState = rtThreadGetState(pThread);
     1338        if (enmActualState == enmCurState)
     1339        {
    13371340            rtThreadSetState(pThread, RTTHREADSTATE_RUNNING);
     1341            if (   pThread->LockValidator.pRec
     1342                && pThread->LockValidator.enmRecState == enmCurState)
     1343                ASMAtomicWritePtr((void * volatile *)&pThread->LockValidator.pRec, NULL);
     1344        }
     1345        /* This is a bit ugly... :-/ */
     1346        else if (   (   enmActualState == RTTHREADSTATE_TERMINATED
     1347                     || enmActualState == RTTHREADSTATE_INITIALIZING)
     1348                 && pThread->LockValidator.pRec)
     1349            ASMAtomicWritePtr((void * volatile *)&pThread->LockValidator.pRec, NULL);
     1350        Assert(   pThread->LockValidator.pRec == NULL
     1351               || RTTHREAD_IS_SLEEPING(enmActualState));
    13381352    }
    13391353}
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