Index: /trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp	(revision 31406)
+++ /trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp	(revision 31407)
@@ -588,5 +588,5 @@
                         pGVM->hSelf     = iHandle;
                         pGVM->pVM       = NULL;
-                        pGVM->cCpus     = cCpus;                        
+                        pGVM->cCpus     = cCpus;
 
                         gvmmR0InitPerVMData(pGVM);
@@ -640,7 +640,8 @@
                                     for (uint32_t i = 0; i < cCpus; i++)
                                     {
-                                        pVM->aCpus[i].pVMR0     = pVM;
-                                        pVM->aCpus[i].pVMR3     = pVM->pVMR3;
-                                        pVM->aCpus[i].idHostCpu = NIL_RTCPUID;
+                                        pVM->aCpus[i].pVMR0           = pVM;
+                                        pVM->aCpus[i].pVMR3           = pVM->pVMR3;
+                                        pVM->aCpus[i].idHostCpu       = NIL_RTCPUID;
+                                        pVM->aCpus[i].hNativeThreadR0 = NIL_RTNATIVETHREAD;
                                     }
 
@@ -656,10 +657,11 @@
                                         AssertRC(rc);
 
-                                        pHandle->pVM        = pVM;
-                                        pHandle->pGVM       = pGVM;
-                                        pHandle->hEMT0      = hEMT0;
-                                        pHandle->ProcId     = ProcId;
-                                        pGVM->pVM           = pVM;
-                                        pGVM->aCpus[0].hEMT = hEMT0;
+                                        pHandle->pVM                  = pVM;
+                                        pHandle->pGVM                 = pGVM;
+                                        pHandle->hEMT0                = hEMT0;
+                                        pHandle->ProcId               = ProcId;
+                                        pGVM->pVM                     = pVM;
+                                        pGVM->aCpus[0].hEMT           = hEMT0;
+                                        pVM->aCpus[0].hNativeThreadR0 = hEMT0;
                                         pGVMM->cEMTs += cCpus;
 
@@ -1104,8 +1106,11 @@
         return rc;
 
-    AssertReturn(idCpu < pVM->cCpus, VERR_INVALID_CPU_ID);
+    AssertReturn(idCpu < pGVM->cCpus, VERR_INVALID_CPU_ID);
     AssertReturn(pGVM->aCpus[idCpu].hEMT == NIL_RTNATIVETHREAD, VERR_ACCESS_DENIED);
-
-    pGVM->aCpus[idCpu].hEMT = RTThreadNativeSelf();
+    Assert(pGVM->cCpus == pVM->cCpus);
+    Assert(pVM->aCpus[idCpu].hNativeThreadR0 == NIL_RTNATIVETHREAD);
+
+    pVM->aCpus[idCpu].hNativeThreadR0 = pGVM->aCpus[idCpu].hEMT = RTThreadNativeSelf();
+
     return VINF_SUCCESS;
 }
Index: /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 31406)
+++ /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 31407)
@@ -964,8 +964,5 @@
 
             PVMCPU pVCpu = &pVM->aCpus[idCpu];
-
-            /* Initialize the r0 native thread handle on the fly. */
-            if (pVCpu->hNativeThreadR0 == NIL_RTNATIVETHREAD) 
-                pVCpu->hNativeThreadR0 = RTThreadNativeSelf(); 
+            Assert(pVCpu->hNativeThreadR0 == RTThreadNativeSelf());
 
 # ifdef DEBUG_sandervl
