Ticket #826: SH-unsubscribe-826.patch
-
cherrypy/process/plugins.py
old new 59 59 'SIGHUP': self.bus.restart, 60 60 'SIGUSR1': self.bus.graceful, 61 61 } 62 63 self._previous_handlers = {} 62 64 63 65 def subscribe(self): 64 66 for sig, func in self.handlers.iteritems(): … … 67 69 except ValueError: 68 70 pass 69 71 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 70 85 def set_handler(self, signal, listener=None): 71 86 """Subscribe a handler for the given signal (number or name). 72 87 … … 88 103 raise ValueError("No such signal: %r" % signal) 89 104 signum = signal 90 105 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 94 109 if listener is not None: 95 110 self.bus.log("Listening for %s." % signame) 96 111 self.bus.subscribe(signame, listener)

