summaryrefslogtreecommitdiffstats
path: root/src/network
diff options
context:
space:
mode:
authorMarkus Goetz <Markus.Goetz@nokia.com>2009-07-13 13:31:36 +0200
committerMarkus Goetz <Markus.Goetz@nokia.com>2009-07-13 13:41:15 +0200
commit1ed4c52dd7ad3cb6b0d846464b69489031ab68a5 (patch)
treed7abb0fbe0b28460572a2cdc60acf06d5e5504ae /src/network
parent9b6eacab99673d7d9848b341c4cf36a7c35f07c0 (diff)
QNAM: Fix double sending of a HTTP request
In some cases, weird timing issues could occur. In those cases, an EOF was sent twice for the upload data, leading to the HTTP code being confused and sending the request headers twice. Task-number: 257662 Reviewed-by: Thiago Macieira
Diffstat (limited to 'src/network')
-rw-r--r--src/network/access/qnetworkaccesshttpbackend.cpp4
-rw-r--r--src/network/access/qnetworkreplyimpl.cpp5
2 files changed, 9 insertions, 0 deletions
diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp
index ce800c240b..c57157ef69 100644
--- a/src/network/access/qnetworkaccesshttpbackend.cpp
+++ b/src/network/access/qnetworkaccesshttpbackend.cpp
@@ -628,6 +628,10 @@ void QNetworkAccessHttpBackend::closeUpstreamChannel()
{
// this indicates that the user finished uploading the data for POST
Q_ASSERT(uploadDevice);
+
+ if (uploadDevice->eof)
+ return; // received a 2nd time. should fix 257662 and 256369
+
uploadDevice->eof = true;
emit uploadDevice->readChannelFinished();
}
diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp
index 63a9c2de75..98944fd74b 100644
--- a/src/network/access/qnetworkreplyimpl.cpp
+++ b/src/network/access/qnetworkreplyimpl.cpp
@@ -92,6 +92,9 @@ void QNetworkReplyImplPrivate::_q_startOperation()
void QNetworkReplyImplPrivate::_q_sourceReadyRead()
{
+ if (state != Working)
+ return;
+
// read data from the outgoingData QIODevice into our internal buffer
enum { DesiredBufferSize = 32 * 1024 };
@@ -131,6 +134,8 @@ void QNetworkReplyImplPrivate::_q_sourceReadChannelFinished()
void QNetworkReplyImplPrivate::_q_copyReadyRead()
{
Q_Q(QNetworkReplyImpl);
+ if (state != Working)
+ return;
if (!copyDevice || !q->isOpen())
return;