QNAM: requeue pipelined HTTP requests after unrecoverable socket errors
If we reach the maximum reconnect attempts for an HTTP request with pipelining enabled, those also need to be requeued during cleanup for the connection channel. Otherwise future successful requests on that same channel will incorrectly assign the data to replies from the old pipelined requests, resulting in swapped data in the replies. Task-number: QTBUG-62286 Change-Id: I804b8ac280957b518d63b2341e469a13315a8c27 Reviewed-by: Markus Goetz (Woboq GmbH) <markus@woboq.com>
This commit is contained in:
parent
0273391dbe
commit
9193b6cc85
@ -970,8 +970,11 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket
|
|||||||
|
|
||||||
// emit error for all waiting replies
|
// emit error for all waiting replies
|
||||||
do {
|
do {
|
||||||
// Need to dequeu the request so that we can emit the error.
|
// First requeue the already pipelined requests for the current failed reply,
|
||||||
if (!reply)
|
// then dequeue pending requests so we can also mark them as finished with error
|
||||||
|
if (reply)
|
||||||
|
requeueCurrentlyPipelinedRequests();
|
||||||
|
else
|
||||||
connection->d_func()->dequeueRequest(socket);
|
connection->d_func()->dequeueRequest(socket);
|
||||||
|
|
||||||
if (reply) {
|
if (reply) {
|
||||||
|
Loading…
Reference in New Issue
Block a user