@@ -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