Changeset 20755 in vbox
- Timestamp:
- Jun 21, 2009 11:41:32 PM (15 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
r20753 r20755 92 92 Assert(!(pCritSect->s.Core.fFlags & PDMCRITSECT_FLAGS_PENDING_UNLOCK)); 93 93 94 pCritSect->s.Core.cNestings = 1;94 ASMAtomicWriteS32(&pCritSect->s.Core.cNestings, 1); 95 95 ASMAtomicWriteHandle(&pCritSect->s.Core.NativeThreadOwner, hNativeSelf); 96 96 … … 188 188 { 189 189 ASMAtomicIncS32(&pCritSect->s.Core.cLockers); 190 pCritSect->s.Core.cNestings++;191 pCritSect->s.Core.fFlags &= ~PDMCRITSECT_FLAGS_PENDING_UNLOCK;190 ASMAtomicIncS32(&pCritSect->s.Core.cNestings); 191 ASMAtomicAndU32(&pCritSect->s.Core.fFlags, ~PDMCRITSECT_FLAGS_PENDING_UNLOCK); 192 192 return VINF_SUCCESS; 193 193 } … … 255 255 { 256 256 ASMAtomicIncS32(&pCritSect->s.Core.cLockers); 257 pCritSect->s.Core.cNestings++;258 pCritSect->s.Core.fFlags &= ~PDMCRITSECT_FLAGS_PENDING_UNLOCK;257 ASMAtomicIncS32(&pCritSect->s.Core.cNestings); 258 ASMAtomicAndU32(&pCritSect->s.Core.fFlags, ~PDMCRITSECT_FLAGS_PENDING_UNLOCK); 259 259 return VINF_SUCCESS; 260 260 } … … 317 317 if (pCritSect->s.Core.cNestings > 1) 318 318 { 319 pCritSect->s.Core.cNestings--;319 ASMAtomicDecS32(&pCritSect->s.Core.cNestings); 320 320 ASMAtomicDecS32(&pCritSect->s.Core.cLockers); 321 321 return; … … 336 336 # endif 337 337 # endif 338 pCritSect->s.Core.fFlags &= ~PDMCRITSECT_FLAGS_PENDING_UNLOCK;338 ASMAtomicAndU32(&pCritSect->s.Core.fFlags, ~PDMCRITSECT_FLAGS_PENDING_UNLOCK); 339 339 Assert(pCritSect->s.Core.Strict.ThreadOwner == NIL_RTTHREAD); 340 340 ASMAtomicWriteHandle(&pCritSect->s.Core.NativeThreadOwner, NIL_RTNATIVETHREAD); 341 pCritSect->s.Core.cNestings--;341 ASMAtomicDecS32(&pCritSect->s.Core.cNestings); 342 342 343 343 /* stop and decrement lockers. */ 344 344 STAM_PROFILE_ADV_STOP(&pCritSect->s.StatLocked, l); 345 ASMCompilerBarrier(); 345 346 if (ASMAtomicDecS32(&pCritSect->s.Core.cLockers) >= 0) 346 347 { … … 368 369 if (pCritSect->s.Core.cLockers == 0) 369 370 { 370 pCritSect->s.Core.cNestings = 0;371 ASMAtomicWriteS32(&pCritSect->s.Core.cNestings, 0); 371 372 RTNATIVETHREAD hNativeThread = pCritSect->s.Core.NativeThreadOwner; 372 pCritSect->s.Core.fFlags &= ~PDMCRITSECT_FLAGS_PENDING_UNLOCK;373 ASMAtomicAndU32(&pCritSect->s.Core.fFlags, ~PDMCRITSECT_FLAGS_PENDING_UNLOCK); 373 374 STAM_PROFILE_ADV_STOP(&pCritSect->s.StatLocked, l); 374 375 … … 380 381 ASMAtomicWriteHandle(&pCritSect->s.Core.NativeThreadOwner, hNativeThread); 381 382 STAM_PROFILE_ADV_START(&pCritSect->s.StatLocked, l); 382 pCritSect->s.Core.cNestings = 1;383 } 384 pCritSect->s.Core.fFlags |= PDMCRITSECT_FLAGS_PENDING_UNLOCK;383 ASMAtomicWriteS32(&pCritSect->s.Core.cNestings, 1); 384 } 385 ASMAtomicOrU32(&pCritSect->s.Core.fFlags, PDMCRITSECT_FLAGS_PENDING_UNLOCK); 385 386 386 387 /*
Note:
See TracChangeset
for help on using the changeset viewer.

