Index: /trunk/src/VBox/ValidationKit/testdriver/base.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testdriver/base.py	(revision 61952)
+++ /trunk/src/VBox/ValidationKit/testdriver/base.py	(revision 61953)
@@ -514,7 +514,8 @@
                     cMsWait = 1000;
                 try:
-                    self.oCv.wait(cMsWait / 1000)
+                    self.oCv.wait(cMsWait / 1000.0);
                 except:
                     pass;
+                reporter.doPollWork();
                 fState = self.pollTask(True);
 
Index: /trunk/src/VBox/ValidationKit/testdriver/reporter.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testdriver/reporter.py	(revision 61952)
+++ /trunk/src/VBox/ValidationKit/testdriver/reporter.py	(revision 61953)
@@ -285,4 +285,15 @@
             self.testDone(False, sCaller);
         return False;
+
+    #
+    # Misc.
+    #
+
+    def doPollWork(self):
+        """
+        Check if any pending stuff expired and needs doing.
+        """
+        return None;
+
 
 
@@ -925,4 +936,11 @@
         return None;
 
+    def doPollWork(self):
+        if len(self._asXml) > 0:
+            g_oLock.acquire();
+            self._xmlFlushIfNecessary();
+            g_oLock.release();
+        return None;
+
 
 #
@@ -1356,4 +1374,12 @@
     return cErrors;
 
+def doPollWork():
+    """
+    This can be called from wait loops and similar to make the reporter call
+    home with pending XML and such.
+    """
+    g_oReporter.doPollWork();
+    return None;
+
 
 #
Index: /trunk/src/VBox/ValidationKit/testdriver/vbox.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testdriver/vbox.py	(revision 61952)
+++ /trunk/src/VBox/ValidationKit/testdriver/vbox.py	(revision 61953)
@@ -2289,4 +2289,5 @@
                 return -1
 
+            reporter.doPollWork();
             try:    oProgress.waitForCompletion(cMsInterval);
             except: return -2;
Index: /trunk/src/VBox/ValidationKit/testdriver/vboxwrappers.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testdriver/vboxwrappers.py	(revision 61952)
+++ /trunk/src/VBox/ValidationKit/testdriver/vboxwrappers.py	(revision 61953)
@@ -223,4 +223,5 @@
             except KeyboardInterrupt: raise;
             except: pass;
+            reporter.doPollWork();
             fState = self.pollTask(False);
         return fState;
@@ -409,4 +410,5 @@
                 reporter.errorXcpt(self.sName);
                 return -2;
+            reporter.doPollWork();
 
         try:
@@ -481,4 +483,5 @@
                     reporter.errorXcpt(self.sName);
                 return -2;
+            reporter.doPollWork();
         # Not reached.
 
@@ -668,7 +671,8 @@
             if cMsElapsed > cMsTimeout:
                 break;
-            try:    self.oVBoxMgr.waitForEvents(cMsTimeout - cMsElapsed);
+            try:    self.oVBoxMgr.waitForEvents(min(cMsTimeout - cMsElapsed, 10000));
             except KeyboardInterrupt: raise;
             except: pass;
+            reporter.doPollWork();
             fState = self.pollTask(False);
         return fState;
