summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index ff95a49965..24be5b1464 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -1066,8 +1066,18 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest()
channels[0].networkLayerPreference = QAbstractSocket::IPv6Protocol;
channels[0].ensureConnection();
if (channels[0].socket && channels[0].socket->state() == QAbstractSocket::ConnectedState
- && !channels[0].pendingEncrypt && channels[0].h2RequestsToSend.size())
- channels[0].sendRequest();
+ && !channels[0].pendingEncrypt) {
+ if (channels[0].h2RequestsToSend.size()) {
+ channels[0].sendRequest();
+ } else if (!channels[0].reply && !channels[0].switchedToHttp2) {
+ // This covers an edge-case where we're already connected and the "connected"
+ // signal was already sent, but we didn't have any request available at the time,
+ // so it was missed. As such we need to dequeue a request and send it now that we
+ // have one.
+ dequeueRequest(channels[0].socket);
+ channels[0].sendRequest();
+ }
+ }
break;
}
}