From ced53c483da3b1d55850d2087d9a743983c8b944 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 26 Sep 2018 13:15:19 +0200 Subject: QNetworkAccessManager: defer call to _q_networkSessionStateChanged MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also, call it only if the state really changes. If we stay disconnected the whole time, there is no point in trying to create the session over and over. Change-Id: Ic3a92dd0575bed1a23ae36a944cc51b9741fb64a Fixes: QTBUG-49760 Reviewed-by: Jesus Fernandez Reviewed-by: MÃ¥rten Nordheim Reviewed-by: Timur Pocheptsov (cherry picked from commit c89d0f9d532a2719118614b9fa9b8efffbe12f2f) Reviewed-by: Rolf Eike Beer Reviewed-by: Ulf Hermann --- src/network/access/qnetworkaccessmanager.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index b57c058adb..50c4b7cb3e 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -1776,6 +1776,7 @@ void QNetworkAccessManagerPrivate::createSession(const QNetworkConfiguration &co if (config.isValid()) newSession = QSharedNetworkSessionManager::getSession(config); + QNetworkSession::State oldState = QNetworkSession::Invalid; if (networkSessionStrongRef) { //do nothing if new and old session are the same if (networkSessionStrongRef == newSession) @@ -1787,6 +1788,7 @@ void QNetworkAccessManagerPrivate::createSession(const QNetworkConfiguration &co q, SLOT(_q_networkSessionStateChanged(QNetworkSession::State))); QObject::disconnect(networkSessionStrongRef.data(), SIGNAL(error(QNetworkSession::SessionError)), q, SLOT(_q_networkSessionFailed(QNetworkSession::SessionError))); + oldState = networkSessionStrongRef->state(); } //switch to new session (null if config was invalid) @@ -1812,7 +1814,11 @@ void QNetworkAccessManagerPrivate::createSession(const QNetworkConfiguration &co QObject::connect(networkSessionStrongRef.data(), SIGNAL(error(QNetworkSession::SessionError)), q, SLOT(_q_networkSessionFailed(QNetworkSession::SessionError))); - _q_networkSessionStateChanged(networkSessionStrongRef->state()); + const QNetworkSession::State newState = networkSessionStrongRef->state(); + if (newState != oldState) { + QMetaObject::invokeMethod(q, "_q_networkSessionStateChanged", Qt::QueuedConnection, + Q_ARG(QNetworkSession::State, newState)); + } } void QNetworkAccessManagerPrivate::_q_networkSessionClosed() -- cgit v1.2.3