VirtualBox

Changeset 25614 in vbox for trunk/src/VBox/Runtime/r3/win


Ignore:
Timestamp:
Jan 1, 2010 2:19:06 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
56305
Message:

iprt,pdmcritsect: More lock validator refactoring and debugging. Added hooks to semrw-generic.cpp. (Everything is still disabled.)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r3/win/semmutex-win.cpp

    r25607 r25614  
    151151    AssertReturn(pThis->u32Magic == RTSEMMUTEX_MAGIC, VERR_INVALID_HANDLE);
    152152
    153 #ifdef RTSEMMUTEX_STRICT
    154     RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt();
    155     RTLockValidatorCheckOrder(&pThis->ValidatorRec, hThreadSelf, pSrcPos);
    156 #else
    157     RTTHREAD hThreadSelf = RTThreadSelf();
    158 #endif
    159 
    160153    /*
    161154     * Lock mutex semaphore.
    162155     */
     156    RTTHREAD hThreadSelf = NIL_RTTHREAD;
    163157    if (cMillies > 0)
    164158    {
    165159#ifdef RTSEMMUTEX_STRICT
    166         int rc9 = RTLockValidatorCheckBlocking(&pThis->ValidatorRec, hThreadSelf,
    167                                                RTTHREADSTATE_MUTEX, true, pSrcPos);
     160        hThreadSelf = RTThreadSelfAutoAdopt();
     161        int rc9 = RTLockValidatorRecExclCheckOrderAndBlocking(&pThis->ValidatorRec, hThreadSelf, pSrcPos, true);
    168162        if (RT_FAILURE(rc9))
    169163            return rc9;
     164#else
     165        hThreadSelf = RTThreadSelf();
    170166#endif
    171167        RTThreadBlocking(hThreadSelf, RTTHREADSTATE_MUTEX);
     
    179175        case WAIT_OBJECT_0:
    180176#ifdef RTSEMMUTEX_STRICT
    181             RTLockValidatorSetOwner(&pThis->ValidatorRec, hThreadSelf, pSrcPos);
    182 #endif
     177            RTLockValidatorRecExclSetOwner(&pThis->ValidatorRec, hThreadSelf, pSrcPos, false /* we don't know */);
     178#endif
     179/** @todo record who owns this thing and avoid kernel calls during recursion. */
    183180            return VINF_SUCCESS;
    184181
     
    227224    AssertReturn(pThis->u32Magic == RTSEMMUTEX_MAGIC, VERR_INVALID_HANDLE);
    228225
     226#ifdef RTSEMMUTEX_STRICT
     227    int rc9 = RTLockValidatorRecExclReleaseOwner(&pThis->ValidatorRec, false);
     228    if (RT_FAILURE(rc9))
     229        return rc9;
     230#endif
     231
    229232    /*
    230233     * Unlock mutex semaphore.
    231234     */
    232 #ifdef RTSEMMUTEX_STRICT
    233     if (   pThis->ValidatorRec.hThread != NIL_RTTHREAD
    234         && pThis->ValidatorRec.hThread == RTThreadSelf())
    235         RTLockValidatorUnsetOwner(&pThis->ValidatorRec);
    236     else
    237         AssertMsgFailed(("%p hThread=%RTthrd\n", pThis, pThis->ValidatorRec.hThread));
    238 #endif
    239235    if (ReleaseMutex(pThis->hMtx))
    240236        return VINF_SUCCESS;
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