Bonjour - change QSocketNotifier pointers to QSharedPointer

This commit is contained in:
Jonathan Bagg
2020-07-08 18:59:09 -04:00
parent d346cd78a7
commit 9d7b114e6a
2 changed files with 16 additions and 24 deletions

View File

@ -47,8 +47,7 @@ void Resolver::cleanUp()
{ {
DNSServiceRefDeallocate(DNSresolverRef); DNSServiceRefDeallocate(DNSresolverRef);
DNSServiceRefDeallocate(DNSaddressRef); DNSServiceRefDeallocate(DNSaddressRef);
delete resolverNotifier; // the QSocketNotifiers resolverNotifier and addressNotifier get deleted when the QSharedPointer gets deleted along with the Resolver. No need to clear them here.
delete addressNotifier;
QString key = zcs->name() + QString::number(zcs->interfaceIndex()); QString key = zcs->name() + QString::number(zcs->interfaceIndex());
ref->resolvers.remove(key); ref->resolvers.remove(key);
delete this; delete this;
@ -93,8 +92,8 @@ void QZeroConfPrivate::resolve(QZeroConfService zcs)
resolver->cleanUp(); resolver->cleanUp();
} }
else { else {
resolver->resolverNotifier = new QSocketNotifier(sockfd, QSocketNotifier::Read); resolver->resolverNotifier = QSharedPointer<QSocketNotifier>::create(sockfd, QSocketNotifier::Read);
connect(resolver->resolverNotifier, &QSocketNotifier::activated, resolver, &Resolver::resolverReady); connect(resolver->resolverNotifier.data(), &QSocketNotifier::activated, resolver, &Resolver::resolverReady);
} }
} }
else { else {
@ -128,7 +127,7 @@ void DNSSD_API QZeroConfPrivate::browseCallback(DNSServiceRef, DNSServiceFlags f
key = name + QString::number(interfaceIndex); key = name + QString::number(interfaceIndex);
if (flags & kDNSServiceFlagsAdd) { if (flags & kDNSServiceFlagsAdd) {
if (!ref->pub->services.contains(key)) { if (!ref->pub->services.contains(key)) {
zcs = QZeroConfService(new QZeroConfServiceData); zcs = QZeroConfService::create();
zcs->m_name = name; zcs->m_name = name;
zcs->m_type = type; zcs->m_type = type;
zcs->m_domain = domain; zcs->m_domain = domain;
@ -181,7 +180,6 @@ void DNSSD_API QZeroConfPrivate::resolverCallback(DNSServiceRef, DNSServiceFlags
resolver->zcs->m_port = qFromBigEndian<quint16>(port); resolver->zcs->m_port = qFromBigEndian<quint16>(port);
if (resolver->DNSaddressRef) { if (resolver->DNSaddressRef) {
delete resolver->addressNotifier;
DNSServiceRefDeallocate(resolver->DNSaddressRef); DNSServiceRefDeallocate(resolver->DNSaddressRef);
resolver->DNSaddressRef = nullptr; resolver->DNSaddressRef = nullptr;
} }
@ -192,8 +190,8 @@ void DNSSD_API QZeroConfPrivate::resolverCallback(DNSServiceRef, DNSServiceFlags
resolver->cleanUp(); resolver->cleanUp();
} }
else { else {
resolver->addressNotifier = new QSocketNotifier(sockfd, QSocketNotifier::Read); resolver->addressNotifier = QSharedPointer<QSocketNotifier>::create(sockfd, QSocketNotifier::Read);
connect(resolver->addressNotifier, &QSocketNotifier::activated, resolver, &Resolver::addressReady); connect(resolver->addressNotifier.data(), &QSocketNotifier::activated, resolver, &Resolver::addressReady);
} }
} }
else { else {
@ -238,10 +236,7 @@ void QZeroConfPrivate::cleanUp(DNSServiceRef toClean)
return; return;
else if (toClean == browser) { else if (toClean == browser) {
browser = nullptr; browser = nullptr;
if (browserSocket) { browserNotifier.clear();
delete browserSocket;
browserSocket = nullptr;
}
QMap<QString, QZeroConfService >::iterator i; QMap<QString, QZeroConfService >::iterator i;
for (i = pub->services.begin(); i != pub->services.end(); i++) { for (i = pub->services.begin(); i != pub->services.end(); i++) {
QString key = (*i)->name() + QString::number((*i)->interfaceIndex()); QString key = (*i)->name() + QString::number((*i)->interfaceIndex());
@ -252,10 +247,7 @@ void QZeroConfPrivate::cleanUp(DNSServiceRef toClean)
} }
else if (toClean == dnssRef) { else if (toClean == dnssRef) {
dnssRef = nullptr; dnssRef = nullptr;
if (bs) { serviceNotifier.clear();
delete bs;
bs = nullptr;
}
} }
DNSServiceRefDeallocate(toClean); DNSServiceRefDeallocate(toClean);
@ -299,8 +291,8 @@ void QZeroConf::startServicePublish(const char *name, const char *type, const ch
emit error(QZeroConf::serviceRegistrationFailed); emit error(QZeroConf::serviceRegistrationFailed);
} }
else { else {
pri->bs = new QSocketNotifier(sockfd, QSocketNotifier::Read, this); pri->serviceNotifier = QSharedPointer<QSocketNotifier>::create(sockfd, QSocketNotifier::Read, this);
connect(pri->bs, SIGNAL(activated(int)), pri, SLOT(bsRead())); connect(pri->serviceNotifier.data(), &QSocketNotifier::activated, pri, &QZeroConfPrivate::bsRead);
} }
} }
else { else {
@ -366,8 +358,8 @@ void QZeroConf::startBrowser(QString type, QAbstractSocket::NetworkLayerProtocol
emit error(QZeroConf::browserFailed); emit error(QZeroConf::browserFailed);
} }
else { else {
pri->browserSocket = new QSocketNotifier(sockfd, QSocketNotifier::Read, this); pri->browserNotifier = QSharedPointer<QSocketNotifier>::create(sockfd, QSocketNotifier::Read, this);
connect(pri->browserSocket, SIGNAL(activated(int)), pri, SLOT(browserRead())); connect(pri->browserNotifier.data(), &QSocketNotifier::activated, pri, &QZeroConfPrivate::browserRead);
} }
} }
else { else {

View File

@ -47,8 +47,8 @@ public:
QZeroConfPrivate *ref = nullptr; QZeroConfPrivate *ref = nullptr;
DNSServiceRef DNSresolverRef = nullptr; DNSServiceRef DNSresolverRef = nullptr;
DNSServiceRef DNSaddressRef = nullptr; DNSServiceRef DNSaddressRef = nullptr;
QSocketNotifier *resolverNotifier = nullptr; QSharedPointer <QSocketNotifier> resolverNotifier;
QSocketNotifier *addressNotifier = nullptr; QSharedPointer <QSocketNotifier> addressNotifier;
public slots: public slots:
void resolverReady(); void resolverReady();
@ -80,8 +80,8 @@ public:
DNSServiceRef dnssRef = nullptr; DNSServiceRef dnssRef = nullptr;
DNSServiceRef browser = nullptr; DNSServiceRef browser = nullptr;
DNSServiceProtocol protocol; DNSServiceProtocol protocol;
QSocketNotifier *bs = nullptr; QSharedPointer<QSocketNotifier> serviceNotifier;
QSocketNotifier *browserSocket = nullptr; QSharedPointer<QSocketNotifier> browserNotifier;
QByteArray txt; QByteArray txt;
QHash<QString, Resolver*> resolvers; QHash<QString, Resolver*> resolvers;