Http2: Remove errored-out requests from queue

The requests will remove themselves once they get deleted
but since the deletion is done through a _queued_ invokeMethod
to 'deleteLater' we will call
QHttpNetworkConnection::_q_startNextRequest first which may
end up starting a reconnect of the TCP socket which we had the error on.

In this specific instance it manifested as a race condition where we
either don't get a proxyAuthorizationRequired signal at all (it was
emitted while we didn't have any valid replies), or we get the signal
emitted too late and it gets emitted on whatever the next reply was.

Task-number: QTBUG-88417
Pick-to: 5.15 6.0
Change-Id: If3f8ececc5550f1868c90124559cb8e3029646d8
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
Mårten Nordheim 2020-11-30 16:38:07 +01:00
parent 734c8aa9d9
commit 65bcac95a7
2 changed files with 1 additions and 12 deletions

View File

@ -1122,6 +1122,7 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket
Q_ASSERT(currentReply);
emit currentReply->finishedWithError(errorCode, errorString);
}
h2RequestsToSend.clear();
}
// send the next request

View File

@ -1,16 +1,4 @@
# See qtbase/src/testlib/qtestblacklist.cpp for format
[authenticationCacheAfterCancel]
windows-7sp1
windows-10 msvc-2015
# QTBUG-88417
[authenticationCacheAfterCancel:https+socksauth]
ubuntu-20.04
# QTBUG-88417
[authenticationCacheAfterCancel:https+proxyauth]
ubuntu-20.04
[backgroundRequestInterruption]
opensuse-leap
windows-10 msvc-2015