mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-29 02:27:30 +09:00
Bug 1416529. r=mcmanus, a=ritu
MozReview-Commit-ID: CD1l5vLB4yy --HG-- extra : rebase_source : d74f8ca96dab4e0d25d79948fcddbf8dab98bb36
This commit is contained in:
parent
459fe394c4
commit
b49b2afc58
3 changed files with 24 additions and 9 deletions
|
|
@ -1044,6 +1044,15 @@ Http2Session::CleanupStream(Http2Stream *aStream, nsresult aResult,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Http2PushedStream *pushSource = aStream->PushSource();
|
||||||
|
if (pushSource) {
|
||||||
|
// aStream is a synthetic attached to an even push
|
||||||
|
MOZ_ASSERT(pushSource->GetConsumerStream() == aStream);
|
||||||
|
MOZ_ASSERT(!aStream->StreamID());
|
||||||
|
MOZ_ASSERT(!(pushSource->StreamID() & 0x1));
|
||||||
|
aStream->ClearPushSource();
|
||||||
|
}
|
||||||
|
|
||||||
if (aStream->DeferCleanup(aResult)) {
|
if (aStream->DeferCleanup(aResult)) {
|
||||||
LOG3(("Http2Session::CleanupStream 0x%X deferred\n", aStream->StreamID()));
|
LOG3(("Http2Session::CleanupStream 0x%X deferred\n", aStream->StreamID()));
|
||||||
return;
|
return;
|
||||||
|
|
@ -1054,15 +1063,6 @@ Http2Session::CleanupStream(Http2Stream *aStream, nsresult aResult,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Http2PushedStream *pushSource = aStream->PushSource();
|
|
||||||
if (pushSource) {
|
|
||||||
// aStream is a synthetic attached to an even push
|
|
||||||
MOZ_ASSERT(pushSource->GetConsumerStream() == aStream);
|
|
||||||
MOZ_ASSERT(!aStream->StreamID());
|
|
||||||
MOZ_ASSERT(!(pushSource->StreamID() & 0x1));
|
|
||||||
pushSource->SetConsumerStream(nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// don't reset a stream that has recevied a fin or rst
|
// don't reset a stream that has recevied a fin or rst
|
||||||
if (!aStream->RecvdFin() && !aStream->RecvdReset() && aStream->StreamID() &&
|
if (!aStream->RecvdFin() && !aStream->RecvdReset() && aStream->StreamID() &&
|
||||||
!(mInputFrameFinal && (aStream == mInputFrameDataStream))) { // !(recvdfin with mark pending)
|
!(mInputFrameFinal && (aStream == mInputFrameDataStream))) { // !(recvdfin with mark pending)
|
||||||
|
|
|
||||||
|
|
@ -103,10 +103,20 @@ Http2Stream::Http2Stream(nsAHttpTransaction *httpTransaction,
|
||||||
|
|
||||||
Http2Stream::~Http2Stream()
|
Http2Stream::~Http2Stream()
|
||||||
{
|
{
|
||||||
|
ClearPushSource();
|
||||||
ClearTransactionsBlockedOnTunnel();
|
ClearTransactionsBlockedOnTunnel();
|
||||||
mStreamID = Http2Session::kDeadStreamID;
|
mStreamID = Http2Session::kDeadStreamID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Http2Stream::ClearPushSource()
|
||||||
|
{
|
||||||
|
if (mPushSource) {
|
||||||
|
mPushSource->SetConsumerStream(nullptr);
|
||||||
|
mPushSource = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ReadSegments() is used to write data down the socket. Generally, HTTP
|
// ReadSegments() is used to write data down the socket. Generally, HTTP
|
||||||
// request data is pulled from the approriate transaction and
|
// request data is pulled from the approriate transaction and
|
||||||
// converted to HTTP/2 data. Sometimes control data like a window-update is
|
// converted to HTTP/2 data. Sometimes control data like a window-update is
|
||||||
|
|
@ -1083,6 +1093,10 @@ Http2Stream::ConvertPushHeaders(Http2Decompressor *decompressor,
|
||||||
void
|
void
|
||||||
Http2Stream::Close(nsresult reason)
|
Http2Stream::Close(nsresult reason)
|
||||||
{
|
{
|
||||||
|
// In case we are connected to a push, make sure the push knows we are closed,
|
||||||
|
// so it doesn't try to give us any more DATA that comes on it after our close.
|
||||||
|
ClearPushSource();
|
||||||
|
|
||||||
mTransaction->Close(reason);
|
mTransaction->Close(reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@ public:
|
||||||
|
|
||||||
uint32_t StreamID() { return mStreamID; }
|
uint32_t StreamID() { return mStreamID; }
|
||||||
Http2PushedStream *PushSource() { return mPushSource; }
|
Http2PushedStream *PushSource() { return mPushSource; }
|
||||||
|
void ClearPushSource();
|
||||||
|
|
||||||
stateType HTTPState() { return mState; }
|
stateType HTTPState() { return mState; }
|
||||||
void SetHTTPState(stateType val) { mState = val; }
|
void SetHTTPState(stateType val) { mState = val; }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue