QNAM: Fix reply deadlocks on server closing connection
authorMarkus Goetz <markus@woboq.com>
Fri, 24 Jul 2015 07:53:20 +0000 (09:53 +0200)
committerMarkus Goetz (Woboq GmbH) <markus@woboq.com>
Thu, 20 Aug 2015 12:02:32 +0000 (12:02 +0000)
commitbc32c0ebc0bc00db84ca2f28eb16ab2e5b53a1b6
treeebd9b4f1419a4f7e60012356088b71c271837fb1
parentd99c9bcf2c4e14d3db02ad375aa624a0695e838d
QNAM: Fix reply deadlocks on server closing connection

The _q_readyRead can also be called from readMoreLater() because we implemented
it so that bandwidth limited reading can be implemented.
This can lead to a race condition if the socket is closing at the specific moment
and then deadlock the channel: It will stay unusable with a zombie request.
The fix in QHttpProtocolaHandler checks if there is actually bytes available to read
from the socket and only then continue.

The fix in the HTTP channel needs to be done to properly finish the reply in
cases of a server replying with HTTP/1.0 or "Connection: close".
The delayed incovation of _q_receiveReply will properly finish up the reply.

Change-Id: I19ce2ae595f91d56386cc7406ccacc9935672b6b
Reviewed-by: Richard J. Moore <rich@kde.org>
src/network/access/qhttpnetworkconnectionchannel.cpp
src/network/access/qhttpprotocolhandler.cpp