Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikkel Krautz <mikkel@krautz.dk>2016-11-26 00:27:10 +0300
committerMikkel Krautz <mikkel@krautz.dk>2016-11-26 00:27:10 +0300
commit21a603c3f9b3c47c6dab4c7e4418098b8cea4a5b (patch)
treecc6c63ba68f1093561dc866818c7fe44ee172868 /3rdparty
parent52fd689c570422722ca17aacb9ca39cd84a992fa (diff)
3rdparty/qqbonjour-src: in BonjourServiceResolver, always tear down ResolveRecord on error.
This fixes mumble-voip/mumble#2223 Before this commit, BonjourServiceResolver would not consistently tear down the ResolveRecord when an error occurred. The 100% CPU usage problem from issue 2223 happens in BonjourServiceResolver::bonjourResolveReply, where previously, the ResolveRecord was removed from qmResolvers for both error and success -- but was never deleted on error. To fix this issue, we delete the ResolveRecord for bonjourResolveReply's error case. For constency, we also introduce similar code in the BonjourServiceResolver::bonjourSocketReadyRead method. Now, if DNSServiceProcessResult returns an error, we tear down the ResolveRecord and remove it from qmResolvers.
Diffstat (limited to '3rdparty')
-rw-r--r--3rdparty/qqbonjour-src/BonjourServiceResolver.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/3rdparty/qqbonjour-src/BonjourServiceResolver.cpp b/3rdparty/qqbonjour-src/BonjourServiceResolver.cpp
index 503f24c97..0cfd7eb08 100644
--- a/3rdparty/qqbonjour-src/BonjourServiceResolver.cpp
+++ b/3rdparty/qqbonjour-src/BonjourServiceResolver.cpp
@@ -80,9 +80,11 @@ void BonjourServiceResolver::bonjourSocketReadyRead(int sockfd) {
return;
DNSServiceErrorType err = DNSServiceProcessResult(rr->dnssref);
- if (err != kDNSServiceErr_NoError)
+ if (err != kDNSServiceErr_NoError) {
emit error(rr->record, err);
-
+ qmResolvers.remove(DNSServiceRefSockFD(rr->dnssref));
+ delete rr;
+ }
}
@@ -95,6 +97,7 @@ void BonjourServiceResolver::bonjourResolveReply(DNSServiceRef, DNSServiceFlags
if (errorCode != kDNSServiceErr_NoError) {
emit rr->bsr->error(rr->record, errorCode);
+ delete rr;
return;
}
rr->bonjourPort = qFromBigEndian<quint16>(port);