fix(satellite): Thread-Leck im mDNS-Scan — ServiceBrowser werden beendet
Jeder ServiceBrowser ist ein eigener Thread; zc.close() beendet ihn nicht (zeroconf 0.151.5, lokal nachgestellt: +1 Thread pro Browser und Scan, mit cancel() keiner). Bei 14 Diensttypen und einem Scan alle 5 Minuten hatte der Satellit HomeOffice nach ~5 Tagen 18.841 Threads = Thread-Limit des Containers. Seit 30.10. 12:19 scheiterte jeder Scan mit "[Errno 11] Resource temporarily unavailable", auf sat_discover kam keine Antwort mehr (auch die RVS-Verbindung brach zeitweise mit Errno 11 ab). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+11
-1
@@ -469,18 +469,28 @@ def _discover_mdns(timeout: float) -> list[dict]:
|
||||
pass
|
||||
|
||||
zc = None
|
||||
browsers = []
|
||||
try:
|
||||
zc = Zeroconf()
|
||||
listener = _Listener()
|
||||
for t in MDNS_TYPES:
|
||||
try:
|
||||
ServiceBrowser(zc, t, listener)
|
||||
browsers.append(ServiceBrowser(zc, t, listener))
|
||||
except Exception:
|
||||
pass
|
||||
time.sleep(timeout)
|
||||
except Exception as exc:
|
||||
logger.warning("mDNS-Sweep-Fehler: %s", exc)
|
||||
finally:
|
||||
# Jeder ServiceBrowser ist ein eigener Thread, den zc.close() NICHT
|
||||
# beendet — ohne cancel() blieben pro Scan 14 Threads liegen. Nach
|
||||
# ~5 Tagen war das Thread-Limit des Containers voll (18.841), danach
|
||||
# scheiterte jeder Scan mit "[Errno 11] Resource temporarily unavailable".
|
||||
for b in browsers:
|
||||
try:
|
||||
b.cancel()
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
if zc:
|
||||
zc.close()
|
||||
|
||||
Reference in New Issue
Block a user