Index: /trunk/src/VBox/Frontends/VBoxBFE/DisplayImpl.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxBFE/DisplayImpl.cpp	(revision 237)
+++ /trunk/src/VBox/Frontends/VBoxBFE/DisplayImpl.cpp	(revision 238)
@@ -140,11 +140,14 @@
     {
         LogFlow(("VMDisplay::handleDisplayResize: external framebuffer wants us to wait!\n"));
+
+        /* Note: The previously obtained framebuffer lock must be preserved. 
+         *       The EMT keeps the framebuffer lock until the resize process completes.
+         */
+
         /// @todo is this compatible with VBOX_NEXT_STEP?
         // the framebuffer needs more time to process
         // the event so we have to halt the VM until it's done
         RTSemEventMultiReset(mResizeSem);
-        mFramebuffer->Unlock();
         RTSemEventMultiWait(mResizeSem, RT_INDEFINITE_WAIT);
-        mFramebuffer->Lock();
     }
 
Index: /trunk/src/VBox/Main/DisplayImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/DisplayImpl.cpp	(revision 237)
+++ /trunk/src/VBox/Main/DisplayImpl.cpp	(revision 238)
@@ -200,11 +200,13 @@
         LogFlowFunc (("External framebuffer wants us to wait!\n"));
 
+        /* Note: The previously obtained framebuffer lock is preserved.
+         *       The EMT keeps the lock until the resize process completes.
+         */
+        
         /* The framebuffer needs more time to process
          * the event so we have to halt the VM until it's done.
          */
         RTSemEventMultiReset(mResizeSem);
-        mFramebuffer->Unlock();
         RTSemEventMultiWait(mResizeSem, RT_INDEFINITE_WAIT); /** @todo r=bird: this is a serious deadlock point, where EMT is stuck while the main thread is doing VMR3Req for some reason. */
-        mFramebuffer->Lock();
     }
 }
@@ -1540,8 +1542,6 @@
                 "for external framebuffers"));
 
-    mFramebuffer->Lock();
     /* signal our semaphore */
     RTSemEventMultiSignal(mResizeSem);
-    mFramebuffer->Unlock();
 
     return S_OK;
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 237)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 238)
@@ -5501,4 +5501,6 @@
                 The caller checks if the call was successful
                 via IFramebuffer property 'PixelFormat'.
+
+                Note: The method is called by IDisplay under the Framebuffer lock.
             </desc>
             <param name="pixelFormat" type="FramebufferPixelFormat" dir="in">
