VirtualBox

Changeset 60570 in vbox for trunk


Ignore:
Timestamp:
Apr 19, 2016 11:56:33 AM (8 years ago)
Author:
vboxsync
Message:

vbox.py: Try fix unregister() race in EventHandlerBase.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/testdriver/vbox.py

    r59798 r60570  
    478478            if oEvt:
    479479                self.handleEvent(oEvt);
    480                 try:
    481                     self.oEventSrc.eventProcessed(self.oListener, oEvt);
    482                 except:
    483                     reporter.logXcpt();
    484                     break;
     480                if not self.fShutdown:
     481                    try:
     482                        self.oEventSrc.eventProcessed(self.oListener, oEvt);
     483                    except:
     484                        reporter.logXcpt();
     485                        break;
    485486        self.unregister(fWaitForThread = False);
    486487        return None;
     
    500501        Unregister the event handler.
    501502        """
    502         self.fShutdown = True;
    503 
    504         fRc = False;
    505         if self.oEventSrc is not None:
    506             if self.fpApiVer < 3.3:
    507                 try:
    508                     self.oEventSrc.unregisterCallback(self.oListener);
    509                     fRc = True;
    510                 except:
    511                     reporter.errorXcpt('unregisterCallback failed on %s' % (self.oListener,));
    512             else:
    513                 try:
    514                     self.oEventSrc.unregisterListener(self.oListener);
    515                     fRc = True;
    516                 except:
    517                     if self.oVBoxMgr.xcptIsDeadInterface():
    518                         reporter.log('unregisterListener failed on %s because of dead interface (%s)'
    519                                      % (self.oListener, self.oVBoxMgr.xcptToString(),));
    520                     else:
    521                         reporter.errorXcpt('unregisterListener failed on %s' % (self.oListener,));
    522 
    523         if    self.oThread is not None \
    524           and self.oThread != threading.current_thread():
    525             self.oThread.join();
    526             self.oThread = None;
     503        if not self.fShutdown:
     504            self.fShutdown = True;
     505
     506            fRc = False;
     507            if self.oEventSrc is not None:
     508                if self.fpApiVer < 3.3:
     509                    try:
     510                        self.oEventSrc.unregisterCallback(self.oListener);
     511                        fRc = True;
     512                    except:
     513                        reporter.errorXcpt('unregisterCallback failed on %s' % (self.oListener,));
     514                else:
     515                    try:
     516                        self.oEventSrc.unregisterListener(self.oListener);
     517                        fRc = True;
     518                    except:
     519                        if self.oVBoxMgr.xcptIsDeadInterface():
     520                            reporter.log('unregisterListener failed on %s because of dead interface (%s)'
     521                                         % (self.oListener, self.oVBoxMgr.xcptToString(),));
     522                        else:
     523                            reporter.errorXcpt('unregisterListener failed on %s' % (self.oListener,));
     524
     525            if    self.oThread is not None \
     526              and self.oThread != threading.current_thread():
     527                self.oThread.join();
     528                self.oThread = None;
    527529
    528530        _ = fWaitForThread;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette