Index: /trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp	(revision 50538)
+++ /trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp	(revision 50539)
@@ -206,5 +206,5 @@
 
 
-/** Host flags to be updated by a given invokation of the
+/** Host flags to be updated by a given invocation of the
  * vboxGuestUpdateHostFlags() method. */
 enum
@@ -217,11 +217,8 @@
 
 
-/** Check which host flags in a given category are being asserted by some guest
- * session and assert exactly those on the host which are being asserted by one
- * or more sessions.  pCallingSession is purely for sanity checking and can be
- * NULL. */
-static int vboxGuestUpdateHostFlags(PVBOXGUESTDEVEXT pDevExt,
-                                    PVBOXGUESTSESSION pSession,
-                                    unsigned enmFlags)
+/** Unlocked version of and worker for vboxGuestUpdateHostFlags() below. */
+static int vboxGuestUpdateHostFlagsUnlocked(PVBOXGUESTDEVEXT pDevExt,
+                                            PVBOXGUESTSESSION pSession,
+                                            unsigned enmFlags)
 {
     int rc = VINF_SUCCESS;
@@ -230,5 +227,4 @@
     unsigned cSessions = 0;
 
-    RTSpinlockAcquire(pDevExt->SessionSpinlock);
     RTListForEach(&pDevExt->SessionList, pIterator, VBOXGUESTSESSION, ListNode)
     {
@@ -263,4 +259,20 @@
             vboxGuestSetMouseStatus(fMouseStatus);
     }
+    return rc;
+}
+
+
+/** Check which host flags in a given category are being asserted by some guest
+ * session and assert exactly those on the host which are being asserted by one
+ * or more sessions.  pCallingSession is purely for sanity checking and can be
+ * NULL. */
+static int vboxGuestUpdateHostFlags(PVBOXGUESTDEVEXT pDevExt,
+                                    PVBOXGUESTSESSION pSession,
+                                    unsigned enmFlags)
+{
+    int rc;
+
+    RTSpinlockAcquire(pDevExt->SessionSpinlock);
+    rc = vboxGuestUpdateHostFlagsUnlocked(pDevExt, pSession, enmFlags);
     RTSpinlockReleaseNoInts(pDevExt->SessionSpinlock);
     return rc;
@@ -1942,5 +1954,6 @@
     pSession->fFilterMask |= pInfo->u32OrMask;
     pSession->fFilterMask &= ~pInfo->u32NotMask;
-    rc = vboxGuestUpdateHostFlags(pDevExt, pSession, HostFlags_FilterMask);
+    rc = vboxGuestUpdateHostFlagsUnlocked(pDevExt, pSession,
+                                          HostFlags_FilterMask);
     RTSpinlockReleaseNoInts(pDevExt->SessionSpinlock);
     return rc;
@@ -1960,5 +1973,6 @@
     pSession->fCapabilities |= pInfo->u32OrMask;
     pSession->fCapabilities &= ~pInfo->u32NotMask;
-    rc = vboxGuestUpdateHostFlags(pDevExt, pSession, HostFlags_Capabilities);
+    rc = vboxGuestUpdateHostFlagsUnlocked(pDevExt, pSession,
+                                          HostFlags_Capabilities);
     RTSpinlockReleaseNoInts(pDevExt->SessionSpinlock);
     return rc;
@@ -1989,5 +2003,6 @@
     RTSpinlockAcquire(pDevExt->SessionSpinlock);
     pSession->fMouseStatus = fFeatures;
-    rc = vboxGuestUpdateHostFlags(pDevExt, pSession, HostFlags_MouseStatus);
+    rc = vboxGuestUpdateHostFlagsUnlocked(pDevExt, pSession,
+                                          HostFlags_MouseStatus);
     RTSpinlockReleaseNoInts(pDevExt->SessionSpinlock);
     return rc;
