diff --git a/src/network/access/qspdyprotocolhandler.cpp b/src/network/access/qspdyprotocolhandler.cpp index ce8a2d2b1d9..6d5885eb680 100644 --- a/src/network/access/qspdyprotocolhandler.cpp +++ b/src/network/access/qspdyprotocolhandler.cpp @@ -309,11 +309,13 @@ bool QSpdyProtocolHandler::sendRequest() currentReply->setSpdyWasUsed(true); qint32 streamID = generateNextStreamID(); + currentReply->setProperty("SPDYStreamID", streamID); currentReply->setRequest(currentRequest); currentReply->d_func()->connection = m_connection; currentReply->d_func()->connectionChannel = m_channel; m_inFlightStreams.insert(streamID, currentPair); + connect(currentReply, SIGNAL(destroyed(QObject*)), this, SLOT(_q_replyDestroyed(QObject*))); sendSYN_STREAM(currentPair, streamID, /* associatedToStreamID = */ 0); int requestsRemoved = m_channel->spdyRequestsToSend.remove( @@ -325,6 +327,13 @@ bool QSpdyProtocolHandler::sendRequest() return true; } +void QSpdyProtocolHandler::_q_replyDestroyed(QObject* reply) +{ + qint32 streamID = reply->property("SPDYStreamID").toInt(); + if (m_inFlightStreams.remove(streamID)) + sendRST_STREAM(streamID, RST_STREAM_CANCEL); +} + void QSpdyProtocolHandler::_q_receiveReply() { Q_ASSERT(m_socket); diff --git a/src/network/access/qspdyprotocolhandler_p.h b/src/network/access/qspdyprotocolhandler_p.h index 8cbfbdda86f..50c5ed52a12 100644 --- a/src/network/access/qspdyprotocolhandler_p.h +++ b/src/network/access/qspdyprotocolhandler_p.h @@ -108,6 +108,7 @@ public: private slots: void _q_uploadDataReadyRead(); + void _q_replyDestroyed(QObject*); private: