Index: /trunk/src/VBox/Devices/USB/VUSBReadAhead.cpp
===================================================================
--- /trunk/src/VBox/Devices/USB/VUSBReadAhead.cpp	(revision 50452)
+++ /trunk/src/VBox/Devices/USB/VUSBReadAhead.cpp	(revision 50453)
@@ -174,5 +174,6 @@
      * fTerminate to true and returns immediately). Therefore we have to wait until the
      * previous thread is done and all submitted URBs are completed. */
-    while (pPipe->cSubmitted > 0)
+    while (   pPipe->cSubmitted > 0
+           && pPipe->cBuffered > 0)
     {
         Log2(("vusbDevReadAheadThread: still %u packets submitted, waiting before starting...\n", pPipe->cSubmitted));
@@ -246,4 +247,18 @@
     }
 
+    /*
+     * Free all still buffered URBs because another endpoint with a different packet size
+     * and complete different data formats might be served later.
+     */
+    while (pPipe->pBuffUrbHead)
+    {
+        PVUSBURB pBufferedUrb = pPipe->pBuffUrbHead;
+
+        pPipe->pBuffUrbHead = pBufferedUrb->Hci.pNext;
+        pBufferedUrb->VUsb.pfnFree(pBufferedUrb);
+    }
+
+    pPipe->pBuffUrbTail = NULL;
+    pPipe->cBuffered = 0;
     RTMemTmpFree(pArgs);
 
