Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Ticket #826: SH-unsubscribe-826.patch

  • cherrypy/process/plugins.py

    old new  
    5959                         'SIGHUP': self.bus.restart, 
    6060                         'SIGUSR1': self.bus.graceful, 
    6161                         } 
     62 
     63        self._previous_handlers = {} 
    6264     
    6365    def subscribe(self): 
    6466        for sig, func in self.handlers.iteritems(): 
     
    6769            except ValueError: 
    6870                pass 
    6971     
     72    def unsubscribe(self): 
     73        for sig, handler in self._previous_handlers.iteritems(): 
     74            signame = self.signals[sig] 
     75            self.bus.log("Resetting signal handler for %s." % (signame)) 
     76            try: 
     77                if not handler: 
     78                    self.bus.log("Previous handler for %s was unavailable. Resetting to SIG_DFL." % (signame)) 
     79                    handler = _signal.SIG_DFL 
     80                _signal.signal(sig, handler) 
     81            except ValueError: 
     82                self.bus.log("Unable to reset handler for %r." % (signame)) 
     83 
     84 
    7085    def set_handler(self, signal, listener=None): 
    7186        """Subscribe a handler for the given signal (number or name). 
    7287         
     
    88103                raise ValueError("No such signal: %r" % signal) 
    89104            signum = signal 
    90105         
    91         # Should we do something with existing signal handlers? 
    92         # cur = _signal.getsignal(signum) 
    93         _signal.signal(signum, self._handle_signal) 
     106        prev = _signal.signal(signum, self._handle_signal) 
     107        self._previous_handlers[signum] = prev 
     108 
    94109        if listener is not None: 
    95110            self.bus.log("Listening for %s." % signame) 
    96111            self.bus.subscribe(signame, listener) 

Hosted by WebFaction

Log in as guest/cpguest to create tickets