Index: /trunk/src/VBox/ValidationKit/testdriver/vbox.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testdriver/vbox.py	(revision 60569)
+++ /trunk/src/VBox/ValidationKit/testdriver/vbox.py	(revision 60570)
@@ -478,9 +478,10 @@
             if oEvt:
                 self.handleEvent(oEvt);
-                try:
-                    self.oEventSrc.eventProcessed(self.oListener, oEvt);
-                except:
-                    reporter.logXcpt();
-                    break;
+                if not self.fShutdown:
+                    try:
+                        self.oEventSrc.eventProcessed(self.oListener, oEvt);
+                    except:
+                        reporter.logXcpt();
+                        break;
         self.unregister(fWaitForThread = False);
         return None;
@@ -500,29 +501,30 @@
         Unregister the event handler.
         """
-        self.fShutdown = True;
-
-        fRc = False;
-        if self.oEventSrc is not None:
-            if self.fpApiVer < 3.3:
-                try:
-                    self.oEventSrc.unregisterCallback(self.oListener);
-                    fRc = True;
-                except:
-                    reporter.errorXcpt('unregisterCallback failed on %s' % (self.oListener,));
-            else:
-                try:
-                    self.oEventSrc.unregisterListener(self.oListener);
-                    fRc = True;
-                except:
-                    if self.oVBoxMgr.xcptIsDeadInterface():
-                        reporter.log('unregisterListener failed on %s because of dead interface (%s)'
-                                     % (self.oListener, self.oVBoxMgr.xcptToString(),));
-                    else:
-                        reporter.errorXcpt('unregisterListener failed on %s' % (self.oListener,));
-
-        if    self.oThread is not None \
-          and self.oThread != threading.current_thread():
-            self.oThread.join();
-            self.oThread = None;
+        if not self.fShutdown:
+            self.fShutdown = True;
+
+            fRc = False;
+            if self.oEventSrc is not None:
+                if self.fpApiVer < 3.3:
+                    try:
+                        self.oEventSrc.unregisterCallback(self.oListener);
+                        fRc = True;
+                    except:
+                        reporter.errorXcpt('unregisterCallback failed on %s' % (self.oListener,));
+                else:
+                    try:
+                        self.oEventSrc.unregisterListener(self.oListener);
+                        fRc = True;
+                    except:
+                        if self.oVBoxMgr.xcptIsDeadInterface():
+                            reporter.log('unregisterListener failed on %s because of dead interface (%s)'
+                                         % (self.oListener, self.oVBoxMgr.xcptToString(),));
+                        else:
+                            reporter.errorXcpt('unregisterListener failed on %s' % (self.oListener,));
+
+            if    self.oThread is not None \
+              and self.oThread != threading.current_thread():
+                self.oThread.join();
+                self.oThread = None;
 
         _ = fWaitForThread;
