Skip to content

Commit ad3c248

Browse files
committed
Shutdown the service listeners in an organized fashion
Also adds names to the various threads to make debugging easier.
1 parent 7bbee59 commit ad3c248

1 file changed

Lines changed: 15 additions & 9 deletions

File tree

zeroconf.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,7 @@ class Engine(threading.Thread):
811811
"""
812812

813813
def __init__(self, zc):
814-
threading.Thread.__init__(self)
814+
threading.Thread.__init__(self, name='zeroconf-Engine')
815815
self.daemon = True
816816
self.zc = zc
817817
self.readers = {} # maps socket to reader
@@ -893,7 +893,7 @@ class Reaper(threading.Thread):
893893
have expired."""
894894

895895
def __init__(self, zc):
896-
threading.Thread.__init__(self)
896+
threading.Thread.__init__(self, name='zeroconf-Reaper')
897897
self.daemon = True
898898
self.zc = zc
899899
self.start()
@@ -948,7 +948,8 @@ class ServiceBrowser(threading.Thread):
948948
def __init__(self, zc, type_, handlers=None, listener=None):
949949
"""Creates a browser for a specific type"""
950950
assert handlers or listener, 'You need to specify at least one handler'
951-
threading.Thread.__init__(self)
951+
threading.Thread.__init__(self,
952+
name='zeroconf-ServiceBrowser' + type_)
952953
self.daemon = True
953954
self.zc = zc
954955
self.type = type_
@@ -1380,7 +1381,7 @@ def __init__(
13801381
self._respond_sockets.append(respond_socket)
13811382

13821383
self.listeners = []
1383-
self.browsers = []
1384+
self.browsers = {}
13841385
self.services = {}
13851386
self.servicetypes = {}
13861387

@@ -1418,14 +1419,18 @@ def add_service_listener(self, type, listener):
14181419
will then have its update_record method called when information
14191420
arrives for that type."""
14201421
self.remove_service_listener(listener)
1421-
self.browsers.append(ServiceBrowser(self, type, listener))
1422+
self.browsers[listener] = ServiceBrowser(self, type, listener)
14221423

14231424
def remove_service_listener(self, listener):
14241425
"""Removes a listener from the set that is currently listening."""
1425-
for browser in self.browsers:
1426-
if browser.listener == listener:
1427-
browser.cancel()
1428-
del browser
1426+
if listener in self.browsers:
1427+
self.browsers[listener].cancel()
1428+
del self.browsers[listener]
1429+
1430+
def remove_all_service_listeners(self):
1431+
"""Removes a listener from the set that is currently listening."""
1432+
for listener in self.browsers.keys():
1433+
self.remove_service_listener(listener)
14291434

14301435
def register_service(self, info, ttl=_DNS_TTL):
14311436
"""Registers service information to the network with a default TTL
@@ -1691,5 +1696,6 @@ def close(self):
16911696
# shutdown the rest
16921697
self.notify_all()
16931698
self.unregister_all_services()
1699+
self.remove_all_service_listeners()
16941700
for s in self._respond_sockets:
16951701
s.close()

0 commit comments

Comments
 (0)