Chromium Code Reviews
DescriptionRemove Request from Map in OnNewSpdySessionReady().
SpdySessionPool::OnNewSpdySessionReady() calls
HttpStreamFactoryImpl::Request::Complete() repeatedly while there are
any Requests in the map. This relies on
HttpStreamRequest::Delegate::OnStreamReady() destroying the Request,
which in its destructor calls
HttpStreamFactoryImpl::JobController::OnRequestComplete(), which calls
HttpStreamFactoryImpl::JobController::CancelJobs(), which calls
HttpStreamFactoryImpl::JobController::RemoveRequestFromSpdySessionRequestMap(),
which calls SpdySessionPool::RemoveRequestFromSpdySessionRequestMap().
However, if HttpStreamRequest::Delegate::OnStreamReady() does not
destroy the Request, that results in DCHECK(!completed_) triggering in
HttpStreamFactoryImpl::Request::Complete() in a debug build, and an
infinite loop in production build.
This CL fixes this by explicitly calling
RemoveRequestFromSpdySessionRequestMap() in
SpdySessionPool::OnNewSpdySessionReady().
This revives https://crrev.com/2784143003, which was abandoned to do all
the necessary cleanup first. Kudos to xunjieli@ for paving the way.
BUG=706974
Review-Url: https://codereview.chromium.org/2930323002
Cr-Commit-Position: refs/heads/master@{#478704}
Committed: https://chromium.googlesource.com/chromium/src/+/dcdaa5f6458c89fee3f6e2a0913707463c05171e
Patch Set 1 #
Total comments: 2
Patch Set 2 : Re: #7. #
Messages
Total messages: 19 (12 generated)
|
||||||||||||||||||||||||||||