From 519844a9b0f59fdb7de99edac3ba902037f0d3bb Mon Sep 17 00:00:00 2001
From: Timothee 'TTimo' Besset <ttimo@valvesoftware.com>
Date: Fri, 1 Sep 2023 10:02:25 -0500
Subject: [PATCH] cleanup zeroconf context management in ServiceListener

---
 client/devkit_client/__init__.py  | 13 ++++---------
 client/devkit_client/gui2/gui2.py |  2 +-
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/client/devkit_client/__init__.py b/client/devkit_client/__init__.py
index e531d0f..0e8a780 100644
--- a/client/devkit_client/__init__.py
+++ b/client/devkit_client/__init__.py
@@ -369,18 +369,13 @@ class MachineNameType(enum.Enum):
         return '<{}.{}>'.format(self.__class__.__name__, self.name)
 
 
-class ServiceListener(object):
-    def __init__(self, quiet=False):
-        self.r = zeroconf.Zeroconf()
+class ServiceListener:
+    def __init__(self, zc, quiet=False):
+        self.zc = zc
         self.devkits = {}
         self.devkit_events = queue.Queue()
         self.quiet = quiet
 
-    def __del__(self):
-        if self.r is not None:
-            self.r.close()
-            self.r = None
-
     def remove_service(self, zeroconf, type, name):
         # Called from the zeroconf thread
         assert type == STEAM_DEVKIT_TYPE, (name, type)
@@ -402,7 +397,7 @@ class ServiceListener(object):
         if (not self.quiet):
             logger.info("Service %r found", service_name)
         get_service_delay = time.perf_counter()
-        info = self.r.get_service_info(type, name, timeout=ZEROCONF_TIMEOUT)
+        info = self.zc.get_service_info(type, name, timeout=ZEROCONF_TIMEOUT)
         get_service_delay = time.perf_counter() - get_service_delay
         if not self.quiet:
             logger.debug(f'zeroconf.get_service_info delay: {get_service_delay:.1f}')
diff --git a/client/devkit_client/gui2/gui2.py b/client/devkit_client/gui2/gui2.py
index b92ccb6..150f21a 100644
--- a/client/devkit_client/gui2/gui2.py
+++ b/client/devkit_client/gui2/gui2.py
@@ -1093,7 +1093,7 @@ class DevkitsWindow(ToolWindow):
     def setup(self):
         super(DevkitsWindow, self).setup()
         self.zc = zeroconf.Zeroconf()
-        self.zc_listener = devkit_client.ServiceListener(quiet=False)
+        self.zc_listener = devkit_client.ServiceListener(self.zc, quiet=False)
         zeroconf.ServiceBrowser(
             self.zc,
             devkit_client.STEAM_DEVKIT_TYPE,
-- 
GitLab