diff options
author | Keegan McAllister <kmcallister@mozilla.com> | 2014-02-11 16:15:19 -0800 |
---|---|---|
committer | Keegan McAllister <kmcallister@mozilla.com> | 2014-02-12 18:07:32 -0800 |
commit | 36b8f6398448b7f75705edc10061dde9402fe7af (patch) | |
tree | adb3da36e07346910d3d3c28492f9427ae2e7868 /src/components/script/script_task.rs | |
parent | 68cc30c1dfe8ae8ceb2dc9f3ea3e5836119acc4f (diff) | |
download | servo-36b8f6398448b7f75705edc10061dde9402fe7af.tar.gz servo-36b8f6398448b7f75705edc10061dde9402fe7af.zip |
Restore failure handling
We probably leak some threads and resources, e.g. when the script task crashes
and doesn't get a chance to send layout data back to layout to be deallocated.
Not tested with iframes yet.
Diffstat (limited to 'src/components/script/script_task.rs')
-rw-r--r-- | src/components/script/script_task.rs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index 17c60cd45bf..b835798e874 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -39,17 +39,18 @@ use js; use servo_msg::compositor_msg::{FinishedLoading, Loading, PerformingLayout, ScriptListener}; use servo_msg::constellation_msg::{ConstellationChan, IFrameSandboxed, IFrameUnsandboxed}; use servo_msg::constellation_msg::{LoadIframeUrlMsg, LoadCompleteMsg, LoadUrlMsg, NavigationDirection}; -use servo_msg::constellation_msg::{PipelineId, SubpageId}; +use servo_msg::constellation_msg::{PipelineId, SubpageId, Failure, FailureMsg}; use servo_msg::constellation_msg; use servo_net::image_cache_task::ImageCacheTask; use servo_net::resource_task::ResourceTask; use servo_util::geometry::to_frac_px; use servo_util::url::parse_url; -use servo_util::task::spawn_named; +use servo_util::task::send_on_failure; use servo_util::namespace::Null; use std::comm::{Port, SharedChan}; use std::ptr; use std::str::eq_slice; +use std::task; use std::util::replace; /// Messages used to control the script task. @@ -463,10 +464,14 @@ impl ScriptTask { port: Port<ScriptMsg>, chan: ScriptChan, constellation_chan: ConstellationChan, + failure_msg: Failure, resource_task: ResourceTask, image_cache_task: ImageCacheTask, window_size: Size2D<uint>) { - spawn_named("ScriptTask", proc() { + let mut builder = task::task(); + send_on_failure(&mut builder, FailureMsg(failure_msg), (*constellation_chan).clone()); + builder.name("ScriptTask"); + builder.spawn(proc() { let script_task = ScriptTask::new(id, @compositor as @ScriptListener, layout_chan, |