From 4a2e197517dd5a0c7fc18c257182d48cfe82a088 Mon Sep 17 00:00:00 2001 From: Jonathan Bagg Date: Mon, 15 Sep 2025 16:01:36 -0400 Subject: [PATCH] Bonjour - destroy resolvers by resolvers list, not service list If stopBrowser is called after a resolve starts, but before the resolve finished, the service is never added to the services list. This leaves the resolver active and it fires when resolving completes after stopBrowser() has destroyed a bunch of objects. Fix is to destroy resolves according to resolvers list and destroy services according to services list. --- bonjour.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/bonjour.cpp b/bonjour.cpp index 2698af0..88eb3cc 100644 --- a/bonjour.cpp +++ b/bonjour.cpp @@ -239,12 +239,11 @@ void QZeroConfPrivate::cleanUp(DNSServiceRef toClean) else if (toClean == browser) { browser = nullptr; browserNotifier.clear(); - QMap::iterator i; - for (i = pub->services.begin(); i != pub->services.end(); i++) { - QString key = (*i)->name() + QString::number((*i)->interfaceIndex()); - resolvers[key]->cleanUp(); - emit pub->serviceRemoved(*i); - } + for (auto resolver : resolvers) + resolver->cleanUp(); + resolvers.clear(); + for (auto service : pub->services) + emit pub->serviceRemoved(service); pub->services.clear(); } else if (toClean == dnssRef) {