Changeset 37582 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Jun 22, 2011 9:24:45 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
r37452 r37582 210 210 ASMAtomicIncS32(&pCritSect->s.Core.cNestings); 211 211 Assert(pCritSect->s.Core.cNestings > 1); 212 ASMAtomicAndU32(&pCritSect->s.Core.fFlags, ~PDMCRITSECT_FLAGS_PENDING_UNLOCK);213 212 return VINF_SUCCESS; 214 213 } … … 418 417 ASMAtomicIncS32(&pCritSect->s.Core.cNestings); 419 418 Assert(pCritSect->s.Core.cNestings > 1); 420 ASMAtomicAndU32(&pCritSect->s.Core.fFlags, ~PDMCRITSECT_FLAGS_PENDING_UNLOCK);421 419 return VINF_SUCCESS; 422 420 } … … 683 681 if (pCritSect->s.Core.NativeThreadOwner != pVCpu->hNativeThread) 684 682 return false; 685 return (pCritSect->s.Core.fFlags & PDMCRITSECT_FLAGS_PENDING_UNLOCK) == 0; 683 return (pCritSect->s.Core.fFlags & PDMCRITSECT_FLAGS_PENDING_UNLOCK) == 0 684 || pCritSect->s.Core.cNestings > 1; 686 685 #endif 687 686 } … … 694 693 * @returns false if not owner. 695 694 * @param pCritSect The critical section. 696 * @param idCpu VCPU id697 */ 698 VMMDECL(bool) PDMCritSectIsOwnerEx(PCPDMCRITSECT pCritSect, VMCPUID idCpu)695 * @param pVCpu The virtual CPU handle. 696 */ 697 VMMDECL(bool) PDMCritSectIsOwnerEx(PCPDMCRITSECT pCritSect, PVMCPU pVCpu) 699 698 { 700 699 #ifdef IN_RING3 701 NOREF( idCpu);700 NOREF(pVCpu); 702 701 return RTCritSectIsOwner(&pCritSect->s.Core); 703 702 #else 704 PVM pVM = pCritSect->s.CTX_SUFF(pVM); 705 AssertPtr(pVM); 706 Assert(idCpu < pVM->cCpus); 707 return pCritSect->s.Core.NativeThreadOwner == pVM->aCpus[idCpu].hNativeThread 708 && (pCritSect->s.Core.fFlags & PDMCRITSECT_FLAGS_PENDING_UNLOCK) == 0; 709 #endif 710 } 711 712 713 /** 714 * Checks if somebody currently owns the critical section. 715 * 716 * @returns true if locked. 717 * @returns false if not locked. 718 * 719 * @param pCritSect The critical section. 720 * 721 * @remarks This doesn't prove that no deadlocks will occur later on; it's 722 * just a debugging tool 723 */ 724 VMMDECL(bool) PDMCritSectIsOwned(PCPDMCRITSECT pCritSect) 725 { 726 return pCritSect->s.Core.NativeThreadOwner != NIL_RTNATIVETHREAD 727 && (pCritSect->s.Core.fFlags & PDMCRITSECT_FLAGS_PENDING_UNLOCK) == 0; 703 Assert(&pVCpu->CTX_SUFF(pVM)->aCpus[pVCpu->idCpu] == pVCpu); 704 if (pCritSect->s.Core.NativeThreadOwner != pVCpu->hNativeThread) 705 return false; 706 return (pCritSect->s.Core.fFlags & PDMCRITSECT_FLAGS_PENDING_UNLOCK) == 0 707 || pCritSect->s.Core.cNestings > 1; 708 #endif 728 709 } 729 710
Note:
See TracChangeset
for help on using the changeset viewer.