diff options
author | Marc Mutz <marc.mutz@qt.io> | 2023-07-21 23:32:19 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2023-08-14 21:30:44 +0200 |
commit | 5d8db914c9c557bc82b97b410270b6f85ef1e598 (patch) | |
tree | 2278fabd95595d33100d25d546b182cd203930eb /src/network/kernel | |
parent | 4c7cac682fddfad274325ff82b5f212543e5373a (diff) |
QHostInfo: port lookupHostImpl() to SlotObjUniquePtr internally
Avoids the manual deref'ing.
Pick-to: 6.6 6.5
Change-Id: I1a51a468dfa704986f050b29322a424dc6fcd7b7
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/network/kernel')
-rw-r--r-- | src/network/kernel/qhostinfo.cpp | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index 446f9ce4db..b751a153e3 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -726,27 +726,26 @@ QString QHostInfo::localHostName() \internal Called by the various lookupHost overloads to perform the lookup. - Signals either the functor encapuslated in the \a slotObj in the context + Signals either the functor encapuslated in the \a slotObjRaw in the context of \a receiver, or the \a member slot of the \a receiver. - \a receiver might be the nullptr, but only if a \a slotObj is provided. + \a receiver might be the nullptr, but only if a \a slotObjRaw is provided. */ int QHostInfo::lookupHostImpl(const QString &name, const QObject *receiver, - QtPrivate::QSlotObjectBase *slotObj, + QtPrivate::QSlotObjectBase *slotObjRaw, const char *member) { + QtPrivate::SlotObjUniquePtr slotObj{slotObjRaw}; #if defined QHOSTINFO_DEBUG qDebug("QHostInfo::lookupHostImpl(\"%s\", %p, %p, %s)", - name.toLatin1().constData(), receiver, slotObj, member ? member + 1 : 0); + name.toLatin1().constData(), receiver, slotObj.get(), member ? member + 1 : 0); #endif Q_ASSERT(!member != !slotObj); // one of these must be set, but not both Q_ASSERT(receiver || slotObj); if (!QAbstractEventDispatcher::instance(QThread::currentThread())) { qWarning("QHostInfo::lookupHost() called with no event dispatcher"); - if (slotObj) - slotObj->destroyIfLastRef(); return -1; } @@ -759,7 +758,7 @@ int QHostInfo::lookupHostImpl(const QString &name, hostInfo.setError(QHostInfo::HostNotFound); hostInfo.setErrorString(QCoreApplication::translate("QHostInfo", "No host name given")); - QHostInfoResult result(receiver, slotObj); + QHostInfoResult result(receiver, slotObj.release()); if (receiver && member) QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); @@ -776,7 +775,7 @@ int QHostInfo::lookupHostImpl(const QString &name, QHostInfo hostInfo = QHostInfoAgent::lookup(name); hostInfo.setLookupId(id); - QHostInfoResult result(receiver, slotObj); + QHostInfoResult result(receiver, slotObj.release()); if (receiver && member) QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); @@ -792,7 +791,7 @@ int QHostInfo::lookupHostImpl(const QString &name, QHostInfo info = manager->cache.get(name, &valid); if (valid) { info.setLookupId(id); - QHostInfoResult result(receiver, slotObj); + QHostInfoResult result(receiver, slotObj.release()); if (receiver && member) QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); @@ -802,13 +801,11 @@ int QHostInfo::lookupHostImpl(const QString &name, } // cache is not enabled or it was not in the cache, do normal lookup - QHostInfoRunnable *runnable = new QHostInfoRunnable(name, id, receiver, slotObj); + QHostInfoRunnable *runnable = new QHostInfoRunnable(name, id, receiver, slotObj.release()); if (receiver && member) QObject::connect(&runnable->resultEmitter, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); manager->scheduleLookup(runnable); - } else if (slotObj) { - slotObj->destroyIfLastRef(); } #endif // Q_OS_WASM return id; |