diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2017-11-17 14:59:30 -0800 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2017-11-20 16:54:25 -0800 |
commit | 7249fd6bd82b70fa097ce2c66dc8bdb4bf023da8 (patch) | |
tree | a6b4f0f69e9c7c618d5c6303676d675c02920e5e /components/net | |
parent | 6dd7af2bdaa45f1f6fa70447f832db90a4aa35e2 (diff) | |
download | servo-7249fd6bd82b70fa097ce2c66dc8bdb4bf023da8.tar.gz servo-7249fd6bd82b70fa097ce2c66dc8bdb4bf023da8.zip |
Fetch cancellation: Listen for cancellation and prematurely abort if cancelled
Diffstat (limited to 'components/net')
-rw-r--r-- | components/net/http_loader.rs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 932318ce1ae..8eb1a901203 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -1087,6 +1087,7 @@ fn http_network_fetch(request: &Request, let devtools_sender = context.devtools_chan.clone(); let meta_status = meta.status.clone(); let meta_headers = meta.headers.clone(); + let cancellation_listener = context.cancellation_listener.clone(); thread::Builder::new().name(format!("fetch worker thread")).spawn(move || { match StreamedResponse::from_http_response(res) { Ok(mut res) => { @@ -1109,6 +1110,11 @@ fn http_network_fetch(request: &Request, } loop { + if cancellation_listener.lock().unwrap().cancelled() { + *res_body.lock().unwrap() = ResponseBody::Done(vec![]); + let _ = done_sender.send(Data::Done); + return; + } match read_block(&mut res) { Ok(Data::Payload(chunk)) => { if let ResponseBody::Receiving(ref mut body) = *res_body.lock().unwrap() { |