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
|
pass
|
||||||
|
|
||||||
zc = None
|
zc = None
|
||||||
|
browsers = []
|
||||||
try:
|
try:
|
||||||
zc = Zeroconf()
|
zc = Zeroconf()
|
||||||
listener = _Listener()
|
listener = _Listener()
|
||||||
for t in MDNS_TYPES:
|
for t in MDNS_TYPES:
|
||||||
try:
|
try:
|
||||||
ServiceBrowser(zc, t, listener)
|
browsers.append(ServiceBrowser(zc, t, listener))
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
time.sleep(timeout)
|
time.sleep(timeout)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
logger.warning("mDNS-Sweep-Fehler: %s", exc)
|
logger.warning("mDNS-Sweep-Fehler: %s", exc)
|
||||||
finally:
|
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:
|
try:
|
||||||
if zc:
|
if zc:
|
||||||
zc.close()
|
zc.close()
|
||||||
|
|||||||
Reference in New Issue
Block a user