aboutsummaryrefslogtreecommitdiffstats
path: root/components/net
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2017-11-17 14:59:30 -0800
committerManish Goregaokar <manishsmail@gmail.com>2017-11-20 16:54:25 -0800
commit7249fd6bd82b70fa097ce2c66dc8bdb4bf023da8 (patch)
treea6b4f0f69e9c7c618d5c6303676d675c02920e5e /components/net
parent6dd7af2bdaa45f1f6fa70447f832db90a4aa35e2 (diff)
downloadservo-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.rs6
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() {