Fix crash if a pending request is continued after deletion (see issue #2622).

This is a speculative fix for a crash where the pending ResourceRequest appears
to be invalid after the request is continued from SetInitialized.
This commit is contained in:
Marshall Greenblatt 2019-06-19 15:45:23 +02:00
parent ba08c21517
commit b03a419c6b
2 changed files with 16 additions and 1 deletions

View File

@ -875,6 +875,9 @@ void InterceptedRequest::ContinueToResponseStarted(int error_code) {
} }
void InterceptedRequest::OnDestroy() { void InterceptedRequest::OnDestroy() {
// We don't want any callbacks after this point.
weak_factory_.InvalidateWeakPtrs();
factory_->request_handler_->OnRequestComplete(id_, request_, status_); factory_->request_handler_->OnRequestComplete(id_, request_, status_);
// Destroys |this|. // Destroys |this|.

View File

@ -920,7 +920,19 @@ class InterceptedRequestHandlerWrapper : public InterceptedRequestHandler {
RequestState* state = GetState(id); RequestState* state = GetState(id);
if (!state) { if (!state) {
// The request may have been canceled during destruction. // The request may have been aborted during initialization or canceled
// during destruction. This method will always be called before a request
// is deleted, so if the request is currently pending also remove it from
// the list.
if (!pending_requests_.empty()) {
PendingRequests::iterator it = pending_requests_.begin();
for (; it != pending_requests_.end(); ++it) {
if ((*it)->id_ == id) {
pending_requests_.erase(it);
break;
}
}
}
return; return;
} }