diff options
author | Shane Kearns <ext-shane.2.kearns@nokia.com> | 2012-05-31 16:09:38 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-01 15:19:42 +0200 |
commit | bae1613c4c3d8c38b90ed2ba5c1b149e1bc87987 (patch) | |
tree | cb7d38a1a0cb1ca84e7558f374ff2bb29d68a1fa /src/network/access/qnetworkreplyimpl.cpp | |
parent | 3580168c3e357c2289acddc5f2515a3ad306ef2b (diff) |
QNAM - maintain a weak reference to the QNetworkSession
When handling signals from the session, a pointer is needed.
Also the QNetworkReplyImpl needs to access the manager's session.
So, the manager should have a strong and weak reference.
The strong reference is held during connection establishment.
The weak reference is held all the time, though it will become
null when the session is destroyed in idle.
The non static member function getNetworkSession() is used to
create strong references from the weak reference where required.
Task-number: ou1cimx#1004278
Change-Id: I4b5b36b1d996b98e659d993969006c61b4440c15
Reviewed-by: Martin Petersson <Martin.Petersson@nokia.com>
Diffstat (limited to 'src/network/access/qnetworkreplyimpl.cpp')
-rw-r--r-- | src/network/access/qnetworkreplyimpl.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 377f2574ce..7cbbe389da 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -94,7 +94,7 @@ void QNetworkReplyImplPrivate::_q_startOperation() #ifndef QT_NO_BEARERMANAGEMENT // Do not start background requests if they are not allowed by session policy - QSharedPointer<QNetworkSession> session(manager->d_func()->networkSession); + QSharedPointer<QNetworkSession> session(manager->d_func()->getNetworkSession()); QVariant isBackground = backend->request().attribute(QNetworkRequest::BackgroundRequestAttribute, QVariant::fromValue(false)); if (isBackground.toBool() && session && session->usagePolicies().testFlag(QNetworkSession::NoBackgroundTrafficPolicy)) { error(QNetworkReply::BackgroundRequestNotAllowedError, @@ -288,7 +288,7 @@ void QNetworkReplyImplPrivate::_q_networkSessionConnected() if (manager.isNull()) return; - QNetworkSession *session = manager->d_func()->networkSession.data(); + QSharedPointer<QNetworkSession> session = manager->d_func()->getNetworkSession(); if (!session) return; @@ -316,7 +316,7 @@ void QNetworkReplyImplPrivate::_q_networkSessionFailed() // Abort waiting and working replies. if (state == WaitingForSession || state == Working) { state = Working; - QSharedPointer<QNetworkSession> session(manager->d_func()->networkSession); + QSharedPointer<QNetworkSession> session(manager->d_func()->getNetworkSession()); QString errorStr; if (session) errorStr = session->errorString(); @@ -764,7 +764,7 @@ void QNetworkReplyImplPrivate::finished() if (!manager.isNull()) { #ifndef QT_NO_BEARERMANAGEMENT - QNetworkSession *session = manager->d_func()->networkSession.data(); + QSharedPointer<QNetworkSession> session (manager->d_func()->getNetworkSession()); if (session && session->state() == QNetworkSession::Roaming && state == Working && errorCode != QNetworkReply::OperationCanceledError) { // only content with a known size will fail with a temporary network failure error |