diff options
author | Diego Marcos <diego.marcos@gmail.com> | 2015-01-26 15:27:47 -0800 |
---|---|---|
committer | Diego Marcos <diego.marcos@gmail.com> | 2015-01-30 12:07:53 -0800 |
commit | 7b9c902a0af52b0b25787e09242b70a278ba55d2 (patch) | |
tree | 0dcd4e09e401ef72e892f43d8796f04d4a4bae4c /components/script/script_task.rs | |
parent | 648b4991b967cfe297a333624fa05b4de2e56be3 (diff) | |
download | servo-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.rs | 10 |
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 => (), } |