VirtualBox

Changeset 25482 in vbox for trunk/src/VBox/Runtime/generic


Ignore:
Timestamp:
Dec 18, 2009 1:39:00 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
56151
Message:

critsect-generic.cpp: made it less of an #ifdef orgy...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/generic/critsect-generic.cpp

    r25478 r25482  
    4545
    4646
     47/*******************************************************************************
     48*   Internal Functions                                                         *
     49*******************************************************************************/
     50DECL_FORCE_INLINE(int) rtCritSectEnter(PRTCRITSECT pCritSect, PCRTLOCKVALIDATORSRCPOS pSrcPos);
     51DECL_FORCE_INLINE(int) rtCritSectTryEnter(PRTCRITSECT pCritSect, PCRTLOCKVALIDATORSRCPOS pSrcPos);
     52
     53
    4754/* In strict mode we're redefining these, so undefine them now for the implementation. */
    4855#undef RTCritSectEnter
    4956#undef RTCritSectTryEnter
    5057#undef RTCritSectEnterMultiple
     58
    5159
    5260
     
    8593
    8694
    87 #ifdef RTCRITSECT_STRICT
    88 RTDECL(int) RTCritSectEnterMultipleDebug(size_t cCritSects, PRTCRITSECT *papCritSects, RTUINTPTR uId, RT_SRC_POS_DECL)
    89 #else
    90 RTDECL(int) RTCritSectEnterMultiple(size_t cCritSects, PRTCRITSECT *papCritSects)
    91 #endif
     95static int rtCritSectEnterMultiple(size_t cCritSects, PRTCRITSECT *papCritSects, PCRTLOCKVALIDATORSRCPOS pSrcPos)
    9296{
    9397    Assert(cCritSects > 0);
     
    101105    for (i = 0; i < cCritSects; i++)
    102106    {
    103 #ifdef RTCRITSECT_STRICT
    104         rc = RTCritSectTryEnterDebug(papCritSects[i], uId, RT_SRC_POS_ARGS);
    105 #else
    106         rc = RTCritSectTryEnter(papCritSects[i]);
    107 #endif
     107        rc = rtCritSectTryEnter(papCritSects[i], pSrcPos);
    108108        if (RT_FAILURE(rc))
    109109            break;
     
    139139         * Wait on the one we failed to get.
    140140         */
    141 #ifdef RTCRITSECT_STRICT
    142         rc = RTCritSectEnterDebug(papCritSects[i], uId, RT_SRC_POS_ARGS);
    143 #else
    144         rc = RTCritSectEnter(papCritSects[i]);
    145 #endif
     141        rc = rtCritSectEnter(papCritSects[i], pSrcPos);
    146142        if (RT_FAILURE(rc))
    147143            return rc;
     
    154150            if (j != i)
    155151            {
    156 #ifdef RTCRITSECT_STRICT
    157                 rc = RTCritSectTryEnterDebug(papCritSects[j], uId, RT_SRC_POS_ARGS);
    158 #else
    159                 rc = RTCritSectTryEnter(papCritSects[j]);
    160 #endif
     152                rc = rtCritSectTryEnter(papCritSects[j], pSrcPos);
    161153                if (RT_FAILURE(rc))
    162154                    break;
     
    177169    }
    178170}
    179 #ifdef RTCRITSECT_STRICT
     171
     172
     173RTDECL(int) RTCritSectEnterMultiple(size_t cCritSects, PRTCRITSECT *papCritSects)
     174{
     175#ifndef RTCRITSECT_STRICT
     176    return rtCritSectEnterMultiple(cCritSects, papCritSects, NULL);
     177#else
     178    RTLOCKVALIDATORSRCPOS SrcPos = RTLOCKVALIDATORSRCPOS_INIT_NORMAL_API();
     179    return rtCritSectEnterMultiple(cCritSects, papCritSects, &SrcPos);
     180#endif
     181}
     182RT_EXPORT_SYMBOL(RTCritSectEnterMultiple);
     183
     184
     185RTDECL(int) RTCritSectEnterMultipleDebug(size_t cCritSects, PRTCRITSECT *papCritSects, RTUINTPTR uId, RT_SRC_POS_DECL)
     186{
     187    RTLOCKVALIDATORSRCPOS SrcPos = RTLOCKVALIDATORSRCPOS_INIT_DEBUG_API();
     188    return rtCritSectEnterMultiple(cCritSects, papCritSects, &SrcPos);
     189}
    180190RT_EXPORT_SYMBOL(RTCritSectEnterMultipleDebug);
    181 #else
    182 RT_EXPORT_SYMBOL(RTCritSectEnterMultiple);
    183 #endif
    184 
    185 
    186 #ifdef RTCRITSECT_STRICT
    187 RTDECL(int) RTCritSectEnterMultiple(size_t cCritSects, PRTCRITSECT *papCritSects)
    188 {
    189     return RTCritSectEnterMultipleDebug(cCritSects, papCritSects, 0, RT_SRC_POS);
    190 }
    191 RT_EXPORT_SYMBOL(RTCritSectEnterMultiple);
    192 
    193 
    194 #else  /* !RTCRITSECT_STRICT */
    195 RTDECL(int) RTCritSectEnterMultipleDebug(size_t cCritSects, PRTCRITSECT *papCritSects, RTUINTPTR uId, RT_SRC_POS_DECL)
    196 {
    197     return RTCritSectEnterMultiple(cCritSects, papCritSects);
    198 }
    199 RT_EXPORT_SYMBOL(RTCritSectEnterMultipleDebug);
    200 #endif /* !RTCRITSECT_STRICT */
    201 
    202 
    203 #ifdef RTCRITSECT_STRICT
    204 RTDECL(int) RTCritSectTryEnterDebug(PRTCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL)
    205 #else
    206 RTDECL(int) RTCritSectTryEnter(PRTCRITSECT pCritSect)
    207 #endif
     191
     192
     193
     194DECL_FORCE_INLINE(int) rtCritSectTryEnter(PRTCRITSECT pCritSect, PCRTLOCKVALIDATORSRCPOS pSrcPos)
    208195{
    209196    Assert(pCritSect);
     
    244231    ASMAtomicWriteHandle(&pCritSect->NativeThreadOwner, NativeThreadSelf);
    245232#ifdef RTCRITSECT_STRICT
     233    RTLockValidatorSetOwner(pCritSect->pValidatorRec, ThreadSelf, pSrcPos);
     234#endif
     235
     236    return VINF_SUCCESS;
     237}
     238
     239
     240RTDECL(int) RTCritSectTryEnter(PRTCRITSECT pCritSect)
     241{
     242#ifndef RTCRTISECT_STRICT
     243    return rtCritSectTryEnter(pCritSect, NULL);
     244#else
     245    RTLOCKVALIDATORSRCPOS SrcPos = RTLOCKVALIDATORSRCPOS_INIT_NORMAL_API();
     246    return rtCritSectTryEnter(pCritSect, &SrcPos);
     247#endif
     248}
     249RT_EXPORT_SYMBOL(RTCritSectTryEnter);
     250
     251
     252RTDECL(int) RTCritSectTryEnterDebug(PRTCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL)
     253{
    246254    RTLOCKVALIDATORSRCPOS SrcPos = RTLOCKVALIDATORSRCPOS_INIT_DEBUG_API();
    247     RTLockValidatorSetOwner(pCritSect->pValidatorRec, ThreadSelf, &SrcPos);
    248 #endif
    249 
    250     return VINF_SUCCESS;
    251 }
    252 #ifdef RTCRITSECT_STRICT
     255    return rtCritSectTryEnter(pCritSect, &SrcPos);
     256}
    253257RT_EXPORT_SYMBOL(RTCritSectTryEnterDebug);
    254 #else
    255 RT_EXPORT_SYMBOL(RTCritSectTryEnter);
    256 #endif
    257 
    258 
    259 #ifdef RTCRITSECT_STRICT
    260 RTDECL(int) RTCritSectTryEnter(PRTCRITSECT pCritSect)
    261 {
    262     return RTCritSectTryEnterDebug(pCritSect, 0, RT_SRC_POS);
    263 }
    264 RT_EXPORT_SYMBOL(RTCritSectTryEnter);
    265 
    266 
    267 #else  /* !RTCRITSECT_STRICT */
    268 RTDECL(int) RTCritSectTryEnterDebug(PRTCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL)
    269 {
    270     return RTCritSectTryEnter(pCritSect);
    271 }
    272 RT_EXPORT_SYMBOL(RTCritSectTryEnterDebug);
    273 #endif /* !RTCRITSECT_STRICT */
    274 
    275 
    276 #ifdef RTCRITSECT_STRICT
    277 RTDECL(int) RTCritSectEnterDebug(PRTCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL)
    278 #else
    279 RTDECL(int) RTCritSectEnter(PRTCRITSECT pCritSect)
    280 #endif
     258
     259
     260DECL_FORCE_INLINE(int) rtCritSectEnter(PRTCRITSECT pCritSect, PCRTLOCKVALIDATORSRCPOS pSrcPos)
    281261{
    282262    Assert(pCritSect);
     
    284264    RTNATIVETHREAD  NativeThreadSelf = RTThreadNativeSelf();
    285265#ifdef RTCRITSECT_STRICT
    286     RTTHREAD                hThreadSelf = RTThreadSelfAutoAdopt();
    287     RTLOCKVALIDATORSRCPOS   SrcPos = RTLOCKVALIDATORSRCPOS_INIT_DEBUG_API();
    288     RTLockValidatorCheckOrder(pCritSect->pValidatorRec, hThreadSelf, &SrcPos);
     266    RTTHREAD        hThreadSelf = RTThreadSelfAutoAdopt();
     267    RTLockValidatorCheckOrder(pCritSect->pValidatorRec, hThreadSelf, pSrcPos);
    289268#endif
    290269
     
    326305            int rc9 = RTLockValidatorCheckBlocking(pCritSect->pValidatorRec, hThreadSelf, RTTHREADSTATE_CRITSECT,
    327306                                                   !(pCritSect->fFlags & RTCRITSECT_FLAGS_NO_NESTING),
    328                                                    &SrcPos);
     307                                                   pSrcPos);
    329308            if (RT_FAILURE(rc9))
    330309            {
     
    333312            }
    334313#endif
     314
    335315            RTThreadBlocking(hThreadSelf, RTTHREADSTATE_CRITSECT);
    336 
    337316            int rc = RTSemEventWait(pCritSect->EventSem, RT_INDEFINITE_WAIT);
    338 
    339317            RTThreadUnblocked(hThreadSelf, RTTHREADSTATE_CRITSECT);
     318
    340319            if (pCritSect->u32Magic != RTCRITSECT_MAGIC)
    341320                return VERR_SEM_DESTROYED;
     
    353332    ASMAtomicWriteHandle(&pCritSect->NativeThreadOwner, NativeThreadSelf);
    354333#ifdef RTCRITSECT_STRICT
    355     RTLockValidatorSetOwner(pCritSect->pValidatorRec, hThreadSelf, &SrcPos);
     334    RTLockValidatorSetOwner(pCritSect->pValidatorRec, hThreadSelf, pSrcPos);
    356335#endif
    357336
    358337    return VINF_SUCCESS;
    359338}
    360 #ifdef RTCRITSECT_STRICT
     339
     340
     341RTDECL(int) RTCritSectEnter(PRTCRITSECT pCritSect)
     342{
     343#ifndef RTCRITSECT_STRICT
     344    return rtCritSectTryEnter(pCritSect, NULL);
     345#else
     346    RTLOCKVALIDATORSRCPOS SrcPos = RTLOCKVALIDATORSRCPOS_INIT_NORMAL_API();
     347    return rtCritSectTryEnter(pCritSect, &SrcPos);
     348#endif
     349}
     350RT_EXPORT_SYMBOL(RTCritSectEnter);
     351
     352
     353RTDECL(int) RTCritSectEnterDebug(PRTCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL)
     354{
     355    RTLOCKVALIDATORSRCPOS SrcPos = RTLOCKVALIDATORSRCPOS_INIT_DEBUG_API();
     356    return rtCritSectEnter(pCritSect, &SrcPos);
     357}
    361358RT_EXPORT_SYMBOL(RTCritSectEnterDebug);
    362 #else
    363 RT_EXPORT_SYMBOL(RTCritSectEnter);
    364 #endif
    365 
    366 
    367 #ifdef RTCRITSECT_STRICT
    368 RTDECL(int) RTCritSectEnter(PRTCRITSECT pCritSect)
    369 {
    370     return RTCritSectEnterDebug(pCritSect, 0, RT_SRC_POS);
    371 }
    372 RT_EXPORT_SYMBOL(RTCritSectEnter);
    373 
    374 
    375 #else  /* !RTCRITSECT_STRICT */
    376 RTDECL(int) RTCritSectEnterDebug(PRTCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL)
    377 {
    378     return RTCritSectEnter(pCritSect);
    379 }
    380 RT_EXPORT_SYMBOL(RTCritSectEnterDebug);
    381 #endif /* !RTCRITSECT_STRICT */
    382359
    383360
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