Changeset 37419 in vbox for trunk/src/VBox/Runtime/generic
- Timestamp:
- Jun 11, 2011 8:25:37 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 72218
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/generic/critsect-generic.cpp
r36492 r37419 52 52 const char *pszNameFmt, ...) 53 53 { 54 AssertReturn(!(fFlags & ~(RTCRITSECT_FLAGS_NO_NESTING | RTCRITSECT_FLAGS_NO_LOCK_VAL | RTCRITSECT_FLAGS_BOOTSTRAP_HACK )),54 AssertReturn(!(fFlags & ~(RTCRITSECT_FLAGS_NO_NESTING | RTCRITSECT_FLAGS_NO_LOCK_VAL | RTCRITSECT_FLAGS_BOOTSTRAP_HACK | RTCRITSECT_FLAGS_NOP)), 55 55 VERR_INVALID_PARAMETER); 56 56 … … 66 66 int rc = VINF_SUCCESS; 67 67 #ifdef RTCRITSECT_STRICT 68 if (!(fFlags & RTCRITSECT_FLAGS_BOOTSTRAP_HACK))68 if (!(fFlags & (RTCRITSECT_FLAGS_BOOTSTRAP_HACK | RTCRITSECT_FLAGS_NOP))) 69 69 { 70 70 if (!pszNameFmt) … … 111 111 AssertPtrReturn(pCritSect, RTLOCKVAL_SUB_CLASS_INVALID); 112 112 AssertReturn(pCritSect->u32Magic == RTCRITSECT_MAGIC, RTLOCKVAL_SUB_CLASS_INVALID); 113 AssertReturn(!(pCritSect->fFlags & RTCRITSECT_FLAGS_NOP), RTLOCKVAL_SUB_CLASS_INVALID); 113 114 return RTLockValidatorRecExclSetSubClass(pCritSect->pValidatorRec, uSubClass); 114 115 #else … … 122 123 Assert(pCritSect); 123 124 Assert(pCritSect->u32Magic == RTCRITSECT_MAGIC); 124 RTNATIVETHREAD NativeThreadSelf = RTThreadNativeSelf(); 125 /*AssertReturn(pCritSect->u32Magic == RTCRITSECT_MAGIC, VERR_SEM_DESTROYED);*/ 126 127 /* 128 * Return straight away if NOP. 129 */ 130 if (pCritSect->fFlags & RTCRITSECT_FLAGS_NOP) 131 return VINF_SUCCESS; 125 132 126 133 /* 127 134 * Try take the lock. (cLockers is -1 if it's free) 128 135 */ 136 RTNATIVETHREAD NativeThreadSelf = RTThreadNativeSelf(); 129 137 if (!ASMAtomicCmpXchgS32(&pCritSect->cLockers, 0, -1)) 130 138 { … … 186 194 DECL_FORCE_INLINE(int) rtCritSectEnter(PRTCRITSECT pCritSect, PCRTLOCKVALSRCPOS pSrcPos) 187 195 { 188 Assert(pCritSect); 189 Assert(pCritSect->u32Magic == RTCRITSECT_MAGIC); 196 AssertPtr(pCritSect); 197 AssertReturn(pCritSect->u32Magic == RTCRITSECT_MAGIC, VERR_SEM_DESTROYED); 198 199 /* 200 * Return straight away if NOP. 201 */ 202 if (pCritSect->fFlags & RTCRITSECT_FLAGS_NOP) 203 return VINF_SUCCESS; 204 205 /* 206 * How is calling and is the order right? 207 */ 190 208 RTNATIVETHREAD NativeThreadSelf = RTThreadNativeSelf(); 191 192 /* If the critical section has already been destroyed, then inform the caller. */ 193 if (pCritSect->u32Magic != RTCRITSECT_MAGIC) 194 return VERR_SEM_DESTROYED; 195 196 #ifdef RTCRITSECT_STRICT 197 RTTHREAD hThreadSelf = pCritSect->pValidatorRec 198 ? RTThreadSelfAutoAdopt() 199 : RTThreadSelf(); 200 int rc9; 209 #ifdef RTCRITSECT_STRICT 210 RTTHREAD hThreadSelf = pCritSect->pValidatorRec 211 ? RTThreadSelfAutoAdopt() 212 : RTThreadSelf(); 213 int rc9; 201 214 if (pCritSect->pValidatorRec) /* (bootstap) */ 202 215 { … … 305 318 { 306 319 /* 307 * Assert ownership and so on.320 * Assert sanity and check for NOP. 308 321 */ 309 322 Assert(pCritSect); 310 323 Assert(pCritSect->u32Magic == RTCRITSECT_MAGIC); 324 if (pCritSect->fFlags & RTCRITSECT_FLAGS_NOP) 325 return VINF_SUCCESS; 326 327 /* 328 * Assert ownership and so on. 329 */ 311 330 Assert(pCritSect->cNestings > 0); 312 331 Assert(pCritSect->cLockers >= 0);
Note:
See TracChangeset
for help on using the changeset viewer.