Changeset 32151 in vbox
- Timestamp:
- Aug 31, 2010 2:26:21 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/FTM.cpp
r32146 r32151 1072 1072 VMMR3DECL(int) FTMR3SetCheckpoint(PVM pVM, FTMCHECKPOINTTYPE enmCheckpoint) 1073 1073 { 1074 int rc; 1075 1074 1076 if (!pVM->fFaultTolerantMaster) 1075 1077 return VINF_SUCCESS; 1076 1077 /** @todo handle ring-0 callbacks on EMT. */1078 VM_ASSERT_OTHER_THREAD(pVM);1079 1078 1080 1079 switch (enmCheckpoint) … … 1087 1086 STAM_REL_COUNTER_INC(&pVM->ftm.s.StatCheckpointStorage); 1088 1087 break; 1088 1089 1089 default: 1090 1090 break; 1091 1091 } 1092 1092 pVM->ftm.s.fCheckpointingActive = true; 1093 int rc = PDMCritSectEnter(&pVM->ftm.s.CritSect, VERR_SEM_BUSY); 1093 if (VM_IS_EMT(pVM)) 1094 { 1095 PVMCPU pVCpu = VMMGetCpu(pVM); 1096 1097 /* We must take special care here as the memory sync is competing with us and requires a responsive EMT. */ 1098 while ((rc = PDMCritSectTryEnter(&pVM->ftm.s.CritSect)) == VERR_SEM_BUSY) 1099 { 1100 if (VM_FF_ISPENDING(pVM, VM_FF_EMT_RENDEZVOUS)) 1101 { 1102 rc = VMMR3EmtRendezvousFF(pVM, pVCpu); 1103 AssertRC(rc); 1104 } 1105 1106 if (VM_FF_ISPENDING(pVM, VM_FF_REQUEST)) 1107 { 1108 rc = VMR3ReqProcessU(pVM->pUVM, VMCPUID_ANY); 1109 AssertRC(rc); 1110 } 1111 } 1112 } 1113 else 1114 rc = PDMCritSectEnter(&pVM->ftm.s.CritSect, VERR_SEM_BUSY); 1115 1094 1116 AssertMsg(rc == VINF_SUCCESS, ("%Rrc\n", rc)); 1095 1117
Note:
See TracChangeset
for help on using the changeset viewer.