aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <release+servo@mozilla.com>2013-07-22 13:33:20 -0700
committerbors-servo <release+servo@mozilla.com>2013-07-22 13:33:20 -0700
commit25fdcb3dca2016196f9e7b5714004b88a524f9cc (patch)
treeeb5df097d318da9a2478dd09b12e81bfaff58df1
parent9b06d01891ed7e25f2d81bcbd128fd6c55b3b5b6 (diff)
parent4d76e7570ed410c5630699f55ac3e8de858cb052 (diff)
downloadservo-25fdcb3dca2016196f9e7b5714004b88a524f9cc.tar.gz
servo-25fdcb3dca2016196f9e7b5714004b88a524f9cc.zip
auto merge of #608 : kmcallister/servo/script-exit, r=metajack
-rw-r--r--src/components/main/constellation.rs4
-rw-r--r--src/components/script/dom/node.rs4
-rw-r--r--src/components/script/script_task.rs15
3 files changed, 10 insertions, 13 deletions
diff --git a/src/components/main/constellation.rs b/src/components/main/constellation.rs
index 91f642f4e8e..88edb160404 100644
--- a/src/components/main/constellation.rs
+++ b/src/components/main/constellation.rs
@@ -254,12 +254,10 @@ impl Constellation {
// Don't navigate on Navigate type, because that is handled by forward/back
match pipeline.navigation_type.get() {
constellation_msg::Load => {
- let _evicted = self.navigation_context.navigate(id);
- /* FIXME(tkuehn): the following code causes a segfault
+ let evicted = self.navigation_context.navigate(id);
for evicted.iter().advance |id| {
self.pipelines.get(id).exit();
}
- */
}
_ => {}
}
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index e797adb3e12..0936b9e490b 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -223,6 +223,10 @@ impl<'self, View> AbstractNode<View> {
/// Sets the layout data, unsafely casting the type as layout wishes. Only layout is allowed
/// to call this. This is wildly unsafe and is therefore marked as such.
pub unsafe fn unsafe_set_layout_data<T>(self, data: @mut T) {
+ // Don't decrement the refcount on data, since we're giving it to the
+ // base structure.
+ cast::forget(data);
+
do self.with_mut_base |base| {
base.layout_data = Some(transmute(data))
}
diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs
index 0c5e9c4af4f..c3b574413c9 100644
--- a/src/components/script/script_task.rs
+++ b/src/components/script/script_task.rs
@@ -167,15 +167,6 @@ pub fn task_from_context(js_context: *JSContext) -> *mut ScriptTask {
}
}
-#[unsafe_destructor]
-impl Drop for ScriptTask {
- fn drop(&self) {
- unsafe {
- let _ = local_data::local_data_pop(global_script_context_key);
- }
- }
-}
-
impl ScriptTask {
/// Creates a new script task.
pub fn new(id: uint,
@@ -362,7 +353,11 @@ impl ScriptTask {
frame.document.teardown();
}
- self.layout_chan.send(layout_interface::ExitMsg)
+ self.layout_chan.send(layout_interface::ExitMsg);
+
+ unsafe {
+ let _ = local_data::local_data_pop(global_script_context_key);
+ }
}
/// The entry point to document loading. Defines bindings, sets up the window and document