27 lines
991 B
Diff
27 lines
991 B
Diff
--- a/src/app/virtualbox/src/VBox/VMM/VMMR3/VM.cpp
|
|
+++ b/src/app/virtualbox/src/VBox/VMM/VMMR3/VM.cpp
|
|
@@ -605,7 +605,7 @@
|
|
rc = SUPR3CallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_GVMM_CREATE_VM, 0, &CreateVMReq.Hdr);
|
|
if (RT_SUCCESS(rc))
|
|
{
|
|
- PVM pVM = pUVM->pVM = CreateVMReq.pVMR3;
|
|
+ PVM pVM = CreateVMReq.pVMR3;
|
|
AssertRelease(VALID_PTR(pVM));
|
|
AssertRelease(pVM->pVMR0 == CreateVMReq.pVMR0);
|
|
AssertRelease(pVM->pSession == pUVM->vm.s.pSession);
|
|
@@ -635,6 +635,14 @@
|
|
pUVM->aCpus[i].pVM = pVM;
|
|
}
|
|
|
|
+ /*
|
|
+ * vmR3EmulationThreadWithId checks (from within another thread) for
|
|
+ * !pUVM->pVM. If not null the function also expects
|
|
+ * pUVM->aCpus[i].pVCpu to be not null. So, make the assignment after
|
|
+ * pUVM->aCpus[i] are actually initialized.
|
|
+ */
|
|
+ ASMCompilerBarrier();
|
|
+ pUVM->pVM = pVM;
|
|
|
|
/*
|
|
* Init the configuration.
|