Index: /trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp	(revision 38891)
+++ /trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp	(revision 38892)
@@ -2049,5 +2049,7 @@
 
 /**
- * Sets the mouse status features for this session and updates them globally.
+ * Sets the mouse status features for this session and updates them
+ * globally.  We aim to ensure that if several threads call this in
+ * parallel the most recent status will always end up being set.
  *
  * @returns VBox status code.
@@ -2063,4 +2065,7 @@
     uint32_t fNewDevExtStatus = 0;
     int rc;
+    /* Exit early if nothing has changed - hack to work around the
+     * Windows Additions not using the common code. */
+    bool fNoAction;
 
     RTSpinlockAcquireNoInts(pDevExt->SessionSpinlock, &Tmp);
@@ -2080,6 +2085,9 @@
     }
     pSession->fMouseStatus = fFeatures & VMMDEV_MOUSE_GUEST_MASK;
+    fNoAction = (pDevExt->fMouseStatus == fNewDevExtStatus);
     pDevExt->fMouseStatus = fNewDevExtStatus;
     RTSpinlockReleaseNoInts(pDevExt->SessionSpinlock, &Tmp);
+    if (fNoAction)
+        return VINF_SUCCESS;
     do
     {
