diff options
author | Patrick Walton <pcwalton@mimiga.net> | 2015-07-09 16:50:06 -0700 |
---|---|---|
committer | Patrick Walton <pcwalton@mimiga.net> | 2015-07-31 11:27:49 -0700 |
commit | 44d13f7fd419bdff1420ed21ca3efd72f4015bfa (patch) | |
tree | eef95c16a10775746262be4eb8fae0859b7ae15d /components/script/dom/xmlhttprequest.rs | |
parent | 9c9d7dc93b1d64b1524eb2bdcbdc817319abc8b9 (diff) | |
download | servo-44d13f7fd419bdff1420ed21ca3efd72f4015bfa.tar.gz servo-44d13f7fd419bdff1420ed21ca3efd72f4015bfa.zip |
net: Use a thread for each `AsyncResponseTarget` to avoid having to send
trait objects across process boundaries.
Diffstat (limited to 'components/script/dom/xmlhttprequest.rs')
-rw-r--r-- | components/script/dom/xmlhttprequest.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 7cb33d1b023..ed4bfe1a705 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -46,8 +46,8 @@ use js::jsval::{JSVal, NullValue, UndefinedValue}; use net_traits::ControlMsg::Load; use net_traits::{ResourceTask, ResourceCORSData, LoadData, LoadConsumer}; -use net_traits::{AsyncResponseListener, Metadata, SerializableHeaders, SerializableMethod}; -use net_traits::{SerializableUrl}; +use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata, SerializableHeaders}; +use net_traits::{SerializableMethod, SerializableUrl}; use cors::{allow_cross_origin_request, CORSRequest, RequestMode, AsyncCORSResponseListener}; use cors::CORSResponse; use util::str::DOMString; @@ -59,7 +59,7 @@ use std::cell::{RefCell, Cell}; use std::default::Default; use std::sync::{Mutex, Arc}; use std::sync::mpsc::{channel, Sender, TryRecvError}; -use std::thread::sleep_ms; +use std::thread::{self, sleep_ms}; use time; use url::{Url, UrlParser}; @@ -271,11 +271,17 @@ impl XMLHttpRequest { } } + let (action_sender, action_receiver) = channel(); let listener = box NetworkListener { context: context, script_chan: script_chan, + receiver: action_receiver, }; - resource_task.send(Load(load_data, LoadConsumer::Listener(listener))).unwrap(); + let response_target = AsyncResponseTarget { + sender: action_sender, + }; + thread::spawn(move || listener.run()); + resource_task.send(Load(load_data, LoadConsumer::Listener(response_target))).unwrap(); } } |