From def1b9784958dbf4459618d15daeae69ed5af332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Tue, 1 Dec 2020 12:02:04 +0100 Subject: [PATCH] Http2: don't call ensureConnection when there's no request available Previously we only checked if there was something in the h2 queue or if we had not yet switched to http2. These means in some cases that following an error it would enter this branch and, because it had not yet switched to http2, it would call 'ensureConnection' which would try start a reconnection. This could make the proxy socket engines try to emit 'auth required' with no replies, meaning nothing happens. Fixes: QTBUG-88417 Pick-to: 5.15 6.0 Change-Id: If37b8c71ac36597adc305fb1b1ea4fa7b48b0d28 Reviewed-by: Timur Pocheptsov --- src/network/access/qhttpnetworkconnection.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index c133a090448..3508f9a6299 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -1064,8 +1064,10 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest() } case QHttpNetworkConnection::ConnectionTypeHTTP2Direct: case QHttpNetworkConnection::ConnectionTypeHTTP2: { - if (channels[0].h2RequestsToSend.isEmpty() && channels[0].switchedToHttp2) + if (channels[0].h2RequestsToSend.isEmpty() && !channels[0].reply + && highPriorityQueue.isEmpty() && lowPriorityQueue.isEmpty()) { return; + } if (networkLayerState == IPv4) channels[0].networkLayerPreference = QAbstractSocket::IPv4Protocol;