Revision a570e2a8 lib/daemon.py

b/lib/daemon.py
37 37
    self._io_wait = []
38 38
    self._signal_wait = []
39 39
    self.sigchld_handler = None
40
    self.sigterm_handler = None
41
    self.quit = False
40 42

  
41 43
  def Run(self):
42 44
    # TODO: Does not yet support adding new event sources while running
......
45 47
      poller.register(fd, conditions)
46 48

  
47 49
    self.sigchld_handler = utils.SignalHandler([signal.SIGCHLD])
50
    self.sigterm_handler = utils.SignalHandler([signal.SIGTERM])
48 51
    try:
49
      while True:
52
      while not self.quit:
50 53
        try:
51 54
          io_events = poller.poll(1000)
52 55
        except select.error, err:
......
68 71
          for owner in self._signal_wait:
69 72
            owner.OnSignal(signal.SIGCHLD)
70 73
          self.sigchld_handler.Clear()
74

  
75
        if self.sigterm_handler.called:
76
          self.quit = True
77
          self.sigterm_handler.Clear()
71 78
    finally:
72 79
      self.sigchld_handler.Reset()
73 80
      self.sigchld_handler = None
81
      self.sigterm_handler.Reset()
82
      self.sigterm_handler = None
83

  
74 84

  
75 85
  def RegisterIO(self, owner, fd, condition):
76 86
    """Registers a receiver for I/O notifications

Also available in: Unified diff