diff options
Diffstat (limited to 'src/network/access')
-rw-r--r-- | src/network/access/qnetworkaccesscachebackend.cpp | 6 | ||||
-rw-r--r-- | src/network/access/qnetworkaccesscachebackend_p.h | 1 | ||||
-rw-r--r-- | src/network/access/qnetworkaccessmanager.cpp | 2 | ||||
-rw-r--r-- | src/network/access/qnetworkreplyhttpimpl.cpp | 11 | ||||
-rw-r--r-- | src/network/access/qnetworkreplyhttpimpl_p.h | 1 |
5 files changed, 12 insertions, 9 deletions
diff --git a/src/network/access/qnetworkaccesscachebackend.cpp b/src/network/access/qnetworkaccesscachebackend.cpp index 86b544052d..0a9702d32b 100644 --- a/src/network/access/qnetworkaccesscachebackend.cpp +++ b/src/network/access/qnetworkaccesscachebackend.cpp @@ -44,7 +44,6 @@ QT_BEGIN_NAMESPACE QNetworkAccessCacheBackend::QNetworkAccessCacheBackend() : QNetworkAccessBackend() - , device(0) { } @@ -117,11 +116,6 @@ bool QNetworkAccessCacheBackend::sendCacheContents() void QNetworkAccessCacheBackend::closeDownstreamChannel() { - if (operation() == QNetworkAccessManager::GetOperation) { - device->close(); - delete device; - device = 0; - } } void QNetworkAccessCacheBackend::closeUpstreamChannel() diff --git a/src/network/access/qnetworkaccesscachebackend_p.h b/src/network/access/qnetworkaccesscachebackend_p.h index b0209c453f..f298b84471 100644 --- a/src/network/access/qnetworkaccesscachebackend_p.h +++ b/src/network/access/qnetworkaccesscachebackend_p.h @@ -67,7 +67,6 @@ public: private: bool sendCacheContents(); - QIODevice *device; }; diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 98f7e6e33a..f00b58a8ce 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -197,7 +197,7 @@ static void ensureInitialized() can be: \snippet code/src_network_access_qnetworkaccessmanager.cpp 1 - \section1 Network and Roaming support + \section1 Network and Roaming Support With the addition of the \l {Bearer Management} API to Qt 4.7 QNetworkAccessManager gained the ability to manage network connections. diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index f4fdc78576..d3f6958d73 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -424,6 +424,7 @@ QNetworkReplyHttpImplPrivate::QNetworkReplyHttpImplPrivate() , synchronous(false) , state(Idle) , statusCode(0) + , uploadDeviceChoking(false) , outgoingData(0) , bytesUploaded(-1) , cacheLoadDevice(0) @@ -1288,9 +1289,12 @@ void QNetworkReplyHttpImplPrivate::wantUploadDataSlot(qint64 maxSize) char *data = const_cast<char*>(uploadByteDevice->readPointer(maxSize, currentUploadDataLength)); if (currentUploadDataLength == 0) { + uploadDeviceChoking = true; // No bytes from upload byte device. There will be bytes later, it will emit readyRead() // and our uploadByteDeviceReadyReadSlot() is called. return; + } else { + uploadDeviceChoking = false; } // Let's make a copy of this data @@ -1303,7 +1307,12 @@ void QNetworkReplyHttpImplPrivate::wantUploadDataSlot(qint64 maxSize) void QNetworkReplyHttpImplPrivate::uploadByteDeviceReadyReadSlot() { // Start the flow between this thread and the HTTP thread again by triggering a upload. - wantUploadDataSlot(1024); + // However only do this when we were choking before, else the state in + // QNonContiguousByteDeviceThreadForwardImpl gets messed up. + if (uploadDeviceChoking) { + uploadDeviceChoking = false; + wantUploadDataSlot(1024); + } } diff --git a/src/network/access/qnetworkreplyhttpimpl_p.h b/src/network/access/qnetworkreplyhttpimpl_p.h index 6ef2842ee9..baff7a943c 100644 --- a/src/network/access/qnetworkreplyhttpimpl_p.h +++ b/src/network/access/qnetworkreplyhttpimpl_p.h @@ -194,6 +194,7 @@ public: // upload QNonContiguousByteDevice* createUploadByteDevice(); QSharedPointer<QNonContiguousByteDevice> uploadByteDevice; + bool uploadDeviceChoking; // if we couldn't readPointer() any data at the moment QIODevice *outgoingData; QSharedPointer<QRingBuffer> outgoingDataBuffer; void emitReplyUploadProgress(qint64 bytesSent, qint64 bytesTotal); // dup? |