Changeset 19439 in vbox for trunk/src/VBox
- Timestamp:
- May 6, 2009 3:04:30 PM (16 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PDMCritSect.cpp
r18532 r19439 312 312 pVM->pdm.s.cQueuedCritSectLeaves = 0; 313 313 VM_FF_CLEAR(pVM, VM_FF_PDM_CRITSECT); 314 }315 316 317 /**318 * Try enter a critical section.319 *320 * @returns VINF_SUCCESS on success.321 * @returns VERR_SEM_BUSY if the critsect was owned.322 * @returns VERR_SEM_NESTED if nested enter on a no nesting section. (Asserted.)323 * @returns VERR_SEM_DESTROYED if RTCritSectDelete was called while waiting.324 * @param pCritSect The critical section.325 */326 VMMR3DECL(int) PDMR3CritSectTryEnter(PPDMCRITSECT pCritSect)327 {328 return RTCritSectTryEnter(&pCritSect->s.Core);329 314 } 330 315 -
trunk/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
r19293 r19439 77 77 { 78 78 pCritSect->s.Core.cNestings = 1; 79 Assert(pVCpu->hNativeThread );79 Assert(pVCpu->hNativeThread != NIL_RTNATIVETHREAD); 80 80 ASMAtomicXchgSize(&pCritSect->s.Core.NativeThreadOwner, pVCpu->hNativeThread); 81 81 STAM_PROFILE_ADV_START(&pCritSect->s.StatLocked, l); … … 99 99 STAM_REL_COUNTER_INC(&pCritSect->s.StatContentionRZLock); 100 100 return rcBusy; 101 #endif /* !IN_RING3 */ 102 } 103 104 105 /** 106 * Try enter a critical section. 107 * 108 * @retval VINF_SUCCESS on success. 109 * @retval VERR_SEM_BUSY if the critsect was owned. 110 * @retval VERR_SEM_NESTED if nested enter on a no nesting section. (Asserted.) 111 * @retval VERR_SEM_DESTROYED if RTCritSectDelete was called while waiting. 112 * 113 * @param pCritSect The critical section. 114 */ 115 VMMDECL(int) PDMCritSectTryEnter(PPDMCRITSECT pCritSect) 116 { 117 #ifdef IN_RING3 118 return RTCritSectTryEnter(&pCritSect->s.Core); 119 #else /* !IN_RING3 (same code as PDMCritSectEnter except for the log statement) */ 120 AssertMsgReturn(pCritSect->s.Core.u32Magic == RTCRITSECT_MAGIC, ("%RX32\n", pCritSect->s.Core.u32Magic), 121 VERR_SEM_DESTROYED); 122 PVM pVM = pCritSect->s.CTX_SUFF(pVM); 123 Assert(pVM); 124 PVMCPU pVCpu = VMMGetCpu(pVM); 125 Assert(pVCpu); 126 127 /* 128 * Try to take the lock. 129 */ 130 if (ASMAtomicCmpXchgS32(&pCritSect->s.Core.cLockers, 0, -1)) 131 { 132 pCritSect->s.Core.cNestings = 1; 133 Assert(pVCpu->hNativeThread != NIL_RTNATIVETHREAD); 134 ASMAtomicXchgSize(&pCritSect->s.Core.NativeThreadOwner, pVCpu->hNativeThread); 135 STAM_PROFILE_ADV_START(&pCritSect->s.StatLocked, l); 136 return VINF_SUCCESS; 137 } 138 139 /* 140 * Nested? 141 */ 142 if (pCritSect->s.Core.NativeThreadOwner == pVCpu->hNativeThread) 143 { 144 pCritSect->s.Core.cNestings++; 145 ASMAtomicIncS32(&pCritSect->s.Core.cLockers); 146 return VINF_SUCCESS; 147 } 148 149 /* 150 * Failed. 151 */ 152 LogFlow(("PDMCritSectTryEnter: locked\n")); 153 STAM_REL_COUNTER_INC(&pCritSect->s.StatContentionRZLock); 154 return VERR_SEM_BUSY; 101 155 #endif /* !IN_RING3 */ 102 156 }
Note:
See TracChangeset
for help on using the changeset viewer.