QHostInfo: port lookupHostImpl() to SlotObjUniquePtr internally
Avoids the manual deref'ing. Change-Id: I1a51a468dfa704986f050b29322a424dc6fcd7b7 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit 5d8db914c9c557bc82b97b410270b6f85ef1e598) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
f0869a66ae
commit
d2210aaf02
@ -726,27 +726,26 @@ QString QHostInfo::localHostName()
|
|||||||
\internal
|
\internal
|
||||||
Called by the various lookupHost overloads to perform the lookup.
|
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.
|
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,
|
int QHostInfo::lookupHostImpl(const QString &name,
|
||||||
const QObject *receiver,
|
const QObject *receiver,
|
||||||
QtPrivate::QSlotObjectBase *slotObj,
|
QtPrivate::QSlotObjectBase *slotObjRaw,
|
||||||
const char *member)
|
const char *member)
|
||||||
{
|
{
|
||||||
|
QtPrivate::SlotObjUniquePtr slotObj{slotObjRaw};
|
||||||
#if defined QHOSTINFO_DEBUG
|
#if defined QHOSTINFO_DEBUG
|
||||||
qDebug("QHostInfo::lookupHostImpl(\"%s\", %p, %p, %s)",
|
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
|
#endif
|
||||||
Q_ASSERT(!member != !slotObj); // one of these must be set, but not both
|
Q_ASSERT(!member != !slotObj); // one of these must be set, but not both
|
||||||
Q_ASSERT(receiver || slotObj);
|
Q_ASSERT(receiver || slotObj);
|
||||||
|
|
||||||
if (!QAbstractEventDispatcher::instance(QThread::currentThread())) {
|
if (!QAbstractEventDispatcher::instance(QThread::currentThread())) {
|
||||||
qWarning("QHostInfo::lookupHost() called with no event dispatcher");
|
qWarning("QHostInfo::lookupHost() called with no event dispatcher");
|
||||||
if (slotObj)
|
|
||||||
slotObj->destroyIfLastRef();
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -759,7 +758,7 @@ int QHostInfo::lookupHostImpl(const QString &name,
|
|||||||
hostInfo.setError(QHostInfo::HostNotFound);
|
hostInfo.setError(QHostInfo::HostNotFound);
|
||||||
hostInfo.setErrorString(QCoreApplication::translate("QHostInfo", "No host name given"));
|
hostInfo.setErrorString(QCoreApplication::translate("QHostInfo", "No host name given"));
|
||||||
|
|
||||||
QHostInfoResult result(receiver, slotObj);
|
QHostInfoResult result(receiver, slotObj.release());
|
||||||
if (receiver && member)
|
if (receiver && member)
|
||||||
QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)),
|
QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)),
|
||||||
receiver, member, Qt::QueuedConnection);
|
receiver, member, Qt::QueuedConnection);
|
||||||
@ -776,7 +775,7 @@ int QHostInfo::lookupHostImpl(const QString &name,
|
|||||||
QHostInfo hostInfo = QHostInfoAgent::lookup(name);
|
QHostInfo hostInfo = QHostInfoAgent::lookup(name);
|
||||||
hostInfo.setLookupId(id);
|
hostInfo.setLookupId(id);
|
||||||
|
|
||||||
QHostInfoResult result(receiver, slotObj);
|
QHostInfoResult result(receiver, slotObj.release());
|
||||||
if (receiver && member)
|
if (receiver && member)
|
||||||
QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)),
|
QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)),
|
||||||
receiver, member, Qt::QueuedConnection);
|
receiver, member, Qt::QueuedConnection);
|
||||||
@ -792,7 +791,7 @@ int QHostInfo::lookupHostImpl(const QString &name,
|
|||||||
QHostInfo info = manager->cache.get(name, &valid);
|
QHostInfo info = manager->cache.get(name, &valid);
|
||||||
if (valid) {
|
if (valid) {
|
||||||
info.setLookupId(id);
|
info.setLookupId(id);
|
||||||
QHostInfoResult result(receiver, slotObj);
|
QHostInfoResult result(receiver, slotObj.release());
|
||||||
if (receiver && member)
|
if (receiver && member)
|
||||||
QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)),
|
QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)),
|
||||||
receiver, member, Qt::QueuedConnection);
|
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
|
// 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)
|
if (receiver && member)
|
||||||
QObject::connect(&runnable->resultEmitter, SIGNAL(resultsReady(QHostInfo)),
|
QObject::connect(&runnable->resultEmitter, SIGNAL(resultsReady(QHostInfo)),
|
||||||
receiver, member, Qt::QueuedConnection);
|
receiver, member, Qt::QueuedConnection);
|
||||||
manager->scheduleLookup(runnable);
|
manager->scheduleLookup(runnable);
|
||||||
} else if (slotObj) {
|
|
||||||
slotObj->destroyIfLastRef();
|
|
||||||
}
|
}
|
||||||
#endif // Q_OS_WASM
|
#endif // Q_OS_WASM
|
||||||
return id;
|
return id;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user