aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_task.rs
diff options
context:
space:
mode:
authorDiego Marcos <diego.marcos@gmail.com>2015-01-26 15:27:47 -0800
committerDiego Marcos <diego.marcos@gmail.com>2015-01-30 12:07:53 -0800
commit7b9c902a0af52b0b25787e09242b70a278ba55d2 (patch)
tree0dcd4e09e401ef72e892f43d8796f04d4a4bae4c /components/script/script_task.rs
parent648b4991b967cfe297a333624fa05b4de2e56be3 (diff)
downloadservo-7b9c902a0af52b0b25787e09242b70a278ba55d2.tar.gz
servo-7b9c902a0af52b0b25787e09242b70a278ba55d2.zip
Adds borrow_for_script_deallocation and unsafe_mut_js_info method to avoid 'DOMRefCell already mutably borrowed' messages. This is just a temporary fix until the Rust standard library allows borrowing already-borrowed RefCell values during unwinding.
It also removes LiveDOMReferences destructor that it's a no-op but it contains an assert that was being violated causing an endless cycle of destructor calls ending up in a stack overflow.
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r--components/script/script_task.rs10
1 files changed, 6 insertions, 4 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 11127f67733..64242d4b297 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -248,11 +248,13 @@ impl<'a> Drop for ScriptMemoryFailsafe<'a> {
fn drop(&mut self) {
match self.owner {
Some(owner) => {
- let page = owner.page.borrow_mut();
- for page in page.iter() {
- *page.mut_js_info() = None;
+ unsafe {
+ let page = owner.page.borrow_for_script_deallocation();
+ for page in page.iter() {
+ *page.unsafe_mut_js_info() = None;
+ }
+ *owner.js_context.borrow_for_script_deallocation() = None;
}
- *owner.js_context.borrow_mut() = None;
}
None => (),
}