Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp	(revision 105896)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp	(revision 105897)
@@ -66,4 +66,5 @@
 #include <iprt/path.h>
 #include <iprt/process.h>
+#include <iprt/rand.h>
 #include <iprt/semaphore.h>
 #include <iprt/thread.h>
@@ -246,5 +247,14 @@
     g_fControlSupportsOptimizations = VbglR3GuestCtrlSupportsOptimizations(g_idControlSvcClient);
     if (g_fControlSupportsOptimizations)
-        rc = VbglR3GuestCtrlMakeMeMaster(g_idControlSvcClient);
+    {
+        for (int i = 0; i < 3; i++)
+        {
+            rc = VbglR3GuestCtrlMakeMeMaster(g_idControlSvcClient);
+            if (RT_SUCCESS(rc))
+                break;
+            RTThreadSleep(RTRandU32Ex(RT_MS_1SEC, RT_MS_5SEC));
+            VGSvcError("Failed to become guest control master (#%d): %Rrc\n", i, rc);
+        }
+    }
     if (RT_SUCCESS(rc))
     {
@@ -272,5 +282,5 @@
         return VINF_SUCCESS;
     }
-    VGSvcError("Failed to become guest control master: %Rrc\n", rc);
+    VGSvcError("Giving up to become guest control master, disconnecting\n");
     VbglR3GuestCtrlDisconnect(g_idControlSvcClient);
 
