=== modified file 'mandos' --- mandos 2011-04-02 06:37:18 +0000 +++ mandos 2011-04-03 00:46:51 +0000 @@ -176,24 +176,19 @@ self.rename_count += 1 def remove(self): """Derived from the Avahi example code""" - if self.group is not None: - try: - self.group.Free() - except (dbus.exceptions.UnknownMethodException, - dbus.exceptions.DBusException) as e: - pass - self.group = None if self.entry_group_state_changed_match is not None: self.entry_group_state_changed_match.remove() self.entry_group_state_changed_match = None + if self.group is not None: + self.group.Reset() def add(self): """Derived from the Avahi example code""" self.remove() - self.group = dbus.Interface( - self.bus.get_object(avahi.DBUS_NAME, - self.server.EntryGroupNew(), - follow_name_owner_changes=True), - avahi.DBUS_INTERFACE_ENTRY_GROUP) + if self.group is None: + self.group = dbus.Interface( + self.bus.get_object(avahi.DBUS_NAME, + self.server.EntryGroupNew()), + avahi.DBUS_INTERFACE_ENTRY_GROUP) self.entry_group_state_changed_match = ( self.group.connect_to_signal( 'StateChanged', self .entry_group_state_changed)) @@ -224,6 +219,13 @@ % unicode(error)) def cleanup(self): """Derived from the Avahi example code""" + if self.group is not None: + try: + self.group.Free() + except (dbus.exceptions.UnknownMethodException, + dbus.exceptions.DBusException) as e: + pass + self.group = None self.remove() def server_state_changed(self, state, error=None): """Derived from the Avahi example code""" @@ -236,13 +238,19 @@ avahi.SERVER_FAILURE: "Zeroconf server failure" } if state in bad_states: - if bad_states[state]: - logger.error(bad_states[state]) - self.remove() + if bad_states[state] is not None: + if error is None: + logger.error(bad_states[state]) + else: + logger.error(bad_states[state] + ": %r", error) + self.cleanup() elif state == avahi.SERVER_RUNNING: self.add() else: - logger.debug("Unknown state: %r", state) + if error is None: + logger.debug("Unknown state: %r", state) + else: + logger.debug("Unknown state: %r: %r", state, error) def activate(self): """Derived from the Avahi example code""" if self.server is None: