Index: /trunk/src/VBox/Main/VirtualBoxClientImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/VirtualBoxClientImpl.cpp	(revision 35134)
+++ /trunk/src/VBox/Main/VirtualBoxClientImpl.cpp	(revision 35135)
@@ -73,5 +73,5 @@
         AssertFailedReturn(E_FAIL);
 
-    rc = unconst(mData.m_pVirtualBox).createLocalObject(CLSID_VirtualBox);
+    rc = mData.m_pVirtualBox.createLocalObject(CLSID_VirtualBox);
     AssertComRCReturnRC(rc);
 
@@ -130,5 +130,5 @@
     }
 
-    unconst(mData.m_pVirtualBox).setNull();
+    mData.m_pVirtualBox.setNull();
 
     ASMAtomicDecU32(&g_cInstances);
@@ -151,5 +151,5 @@
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
 
-    /* this is const, no need to lock */
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     mData.m_pVirtualBox.queryInterfaceTo(aVirtualBox);
     return S_OK;
@@ -220,5 +220,9 @@
         {
             HRESULT rc = S_OK;
-            ComPtr<IVirtualBox> pV = pThis->mData.m_pVirtualBox;
+            ComPtr<IVirtualBox> pV;
+            {
+                AutoReadLock alock(pThis COMMA_LOCKVAL_SRC_POS);
+                pV = pThis->mData.m_pVirtualBox;
+            }
             if (!pV.isNull())
             {
@@ -228,9 +232,11 @@
                 {
                     LogRel(("VirtualBoxClient: detected unresponsive VBoxSVC (rc=%Rhrc)\n", rc));
+                    {
+                        AutoWriteLock alock(pThis COMMA_LOCKVAL_SRC_POS);
+                        /* Throw away the VirtualBox reference, it's no longer
+                         * usable as VBoxSVC terminated in the mean time. */
+                        pThis->mData.m_pVirtualBox.setNull();
+                    }
                     fireVBoxSVCUnavailableEvent(pThis->mData.m_pEventSource);
-
-                    /* Throw away the VirtualBox reference, it's no longer
-                     * usable as VBoxSVC terminated in the mean time. */
-                    unconst(pThis->mData.m_pVirtualBox).setNull();
                 }
             }
@@ -241,9 +247,20 @@
                  * restart attempts in some wedged config can cause high CPU
                  * and disk load. */
-                rc = unconst(pThis->mData.m_pVirtualBox).createLocalObject(CLSID_VirtualBox);
+                ComPtr<IVirtualBox> pVBox;
+                rc = pVBox.createLocalObject(CLSID_VirtualBox);
                 if (FAILED(rc))
                     cMillies = 3 * VBOXCLIENT_DEFAULT_INTERVAL;
                 else
+                {
+                    LogRel(("VirtualBoxClient: detected working VBoxSVC (rc=%Rhrc)\n", rc));
+                    {
+                        AutoWriteLock alock(pThis COMMA_LOCKVAL_SRC_POS);
+                        /* Update the VirtualBox reference, there's a working
+                         * VBoxSVC again from now on. */
+                        pThis->mData.m_pVirtualBox = pVBox;
+                    }
+                    fireVBoxSVCAvailableEvent(pThis->mData.m_pEventSource);
                     cMillies = VBOXCLIENT_DEFAULT_INTERVAL;
+                }
             }
         }
Index: /trunk/src/VBox/Main/include/VirtualBoxClientImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/VirtualBoxClientImpl.h	(revision 35134)
+++ /trunk/src/VBox/Main/include/VirtualBoxClientImpl.h	(revision 35135)
@@ -76,5 +76,5 @@
         {}
 
-        const ComPtr<IVirtualBox> m_pVirtualBox;
+        ComPtr<IVirtualBox> m_pVirtualBox;
         const ComObjPtr<EventSource> m_pEventSource;
 
