summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2018-09-26 13:15:19 +0200
committerRolf Eike Beer <eb@emlix.com>2019-07-08 12:30:45 +0200
commitced53c483da3b1d55850d2087d9a743983c8b944 (patch)
treed465ce84f7b6034baefb846fd08545a4fe53b839 /src
parentda38f0d691d9d7eacfac5fbcbd47b887bd59bd39 (diff)
QNetworkAccessManager: defer call to _q_networkSessionStateChanged
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 <Jesus.Fernandez@qt.io> Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io> Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> (cherry picked from commit c89d0f9d532a2719118614b9fa9b8efffbe12f2f) Reviewed-by: Rolf Eike Beer <eb@emlix.com> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/network/access/qnetworkaccessmanager.cpp8
1 files changed, 7 insertions, 1 deletions
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()