aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/script_task.rs
diff options
context:
space:
mode:
authorKeegan McAllister <kmcallister@mozilla.com>2014-02-11 16:15:19 -0800
committerKeegan McAllister <kmcallister@mozilla.com>2014-02-12 18:07:32 -0800
commit36b8f6398448b7f75705edc10061dde9402fe7af (patch)
treeadb3da36e07346910d3d3c28492f9427ae2e7868 /src/components/script/script_task.rs
parent68cc30c1dfe8ae8ceb2dc9f3ea3e5836119acc4f (diff)
downloadservo-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.rs11
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,