Index: net/url_request/url_request_job.cc |
diff --git a/net/url_request/url_request_job.cc b/net/url_request/url_request_job.cc |
index 732c9d2da3a63a7374ea742a4b42575aae50ed1a..5adda9ae05a46e6ea8048720666092ed531d0483 100644 |
--- a/net/url_request/url_request_job.cc |
+++ b/net/url_request/url_request_job.cc |
@@ -279,7 +279,18 @@ HostPortPair URLRequestJob::GetSocketAddress() const { |
} |
void URLRequestJob::OnSuspend() { |
- Kill(); |
+ // Most errors generated by the Job come as the result of the one current |
+ // operation the job is waiting on returning an error. This event is unusual |
+ // in that the Job may have another operation ongoing, or the Job may be idle |
+ // and waiting on the next call. |
+ // |
+ // Need to cancel through the request to make sure everything is notified |
+ // of the failure (Particularly that the NetworkDelegate, which the Job may be |
+ // waiting on, is notified synchronously) and torn down correctly. |
+ // |
+ // TODO(mmenke): This should probably fail the request with |
+ // NETWORK_IO_SUSPENDED instead. |
+ request_->Cancel(); |
} |
void URLRequestJob::NotifyURLRequestDestroyed() { |