summaryrefslogtreecommitdiffstats
path: root/src/network/access/qnetworkreplyhttpimpl.cpp
diff options
context:
space:
mode:
authorShane Kearns <ext-shane.2.kearns@nokia.com>2012-05-31 16:09:38 +0100
committerQt by Nokia <qt-info@nokia.com>2012-06-01 15:19:42 +0200
commitbae1613c4c3d8c38b90ed2ba5c1b149e1bc87987 (patch)
treecb7d38a1a0cb1ca84e7558f374ff2bb29d68a1fa /src/network/access/qnetworkreplyhttpimpl.cpp
parent3580168c3e357c2289acddc5f2515a3ad306ef2b (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/qnetworkreplyhttpimpl.cpp')
-rw-r--r--src/network/access/qnetworkreplyhttpimpl.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp
index eb4edc8eee..5be59e20ce 100644
--- a/src/network/access/qnetworkreplyhttpimpl.cpp
+++ b/src/network/access/qnetworkreplyhttpimpl.cpp
@@ -759,7 +759,7 @@ void QNetworkReplyHttpImplPrivate::postRequest()
// Create the HTTP thread delegate
QHttpThreadDelegate *delegate = new QHttpThreadDelegate;
#ifndef QT_NO_BEARERMANAGEMENT
- delegate->networkSession = managerPrivate->networkSession;
+ delegate->networkSession = managerPrivate->getNetworkSession();
#endif
// For the synchronous HTTP, this is the normal way the delegate gets deleted
@@ -1505,7 +1505,8 @@ void QNetworkReplyHttpImplPrivate::setResumeOffset(quint64 offset)
bool QNetworkReplyHttpImplPrivate::start()
{
#ifndef QT_NO_BEARERMANAGEMENT
- if (!managerPrivate->networkSession) {
+ QSharedPointer<QNetworkSession> networkSession(managerPrivate->getNetworkSession());
+ if (!networkSession) {
#endif
postRequest();
return true;
@@ -1521,10 +1522,10 @@ bool QNetworkReplyHttpImplPrivate::start()
return true;
}
- if (managerPrivate->networkSession->isOpen() &&
- managerPrivate->networkSession->state() == QNetworkSession::Connected) {
+ if (networkSession->isOpen() &&
+ networkSession->state() == QNetworkSession::Connected) {
Q_Q(QNetworkReplyHttpImpl);
- QObject::connect(managerPrivate->networkSession.data(), SIGNAL(usagePoliciesChanged(QNetworkSession::UsagePolicies)),
+ QObject::connect(networkSession.data(), SIGNAL(usagePoliciesChanged(QNetworkSession::UsagePolicies)),
q, SLOT(_q_networkSessionUsagePoliciesChanged(QNetworkSession::UsagePolicies)));
postRequest();
return true;
@@ -1547,7 +1548,7 @@ void QNetworkReplyHttpImplPrivate::_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 = request.attribute(QNetworkRequest::BackgroundRequestAttribute, QVariant::fromValue(false));
if (isBackground.toBool() && session && session->usagePolicies().testFlag(QNetworkSession::NoBackgroundTrafficPolicy)) {
QMetaObject::invokeMethod(q, "_q_error", synchronous ? Qt::DirectConnection : Qt::QueuedConnection,
@@ -1564,10 +1565,9 @@ void QNetworkReplyHttpImplPrivate::_q_startOperation()
// QNetworkAccessManager will call reply->backend->start() again for us when the session
// state changes.
state = WaitingForSession;
- QNetworkSession *session = managerPrivate->networkSession.data();
if (session) {
- QObject::connect(session, SIGNAL(error(QNetworkSession::SessionError)),
+ QObject::connect(session.data(), SIGNAL(error(QNetworkSession::SessionError)),
q, SLOT(_q_networkSessionFailed()), Qt::QueuedConnection);
if (!session->isOpen()) {
@@ -1724,7 +1724,7 @@ void QNetworkReplyHttpImplPrivate::_q_networkSessionConnected()
if (!manager)
return;
- QNetworkSession *session = managerPrivate->networkSession.data();
+ QSharedPointer<QNetworkSession> session = managerPrivate->getNetworkSession();
if (!session)
return;
@@ -1752,7 +1752,7 @@ void QNetworkReplyHttpImplPrivate::_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();
@@ -1837,7 +1837,7 @@ void QNetworkReplyHttpImplPrivate::finished()
if (manager) {
#ifndef QT_NO_BEARERMANAGEMENT
- QNetworkSession *session = managerPrivate->networkSession.data();
+ QSharedPointer<QNetworkSession> session = managerPrivate->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