Make sure RefCell borrows are temporary.

This fixes two `RefCell<T> is already borrowed` failures when reloading an
existing pipeline, both caused by functions trying to modify `Pipeline::url`
or `ScriptTask::url` while a reference to a previous borrow is still in scope.
This commit is contained in:
Matt Brubeck 2014-04-21 16:04:16 -07:00
parent c6bdc7b7f2
commit b38f7d26d1
2 changed files with 11 additions and 13 deletions

View file

@ -202,7 +202,8 @@ impl Pipeline {
} }
pub fn reload(&self) { pub fn reload(&self) {
self.url.borrow().clone().map(|url| { let url = self.url.borrow().clone();
url.map(|url| {
self.load(url); self.load(url);
}); });
} }

View file

@ -810,13 +810,11 @@ impl ScriptTask {
is a bug."); is a bug.");
let page = page_tree.page(); let page = page_tree.page();
{ let last_loaded_url = replace(&mut *page.mut_url(), None);
let mut page_url = page.mut_url();
let last_loaded_url = replace(&mut *page_url, None);
for loaded in last_loaded_url.iter() { for loaded in last_loaded_url.iter() {
let (ref loaded, needs_reflow) = *loaded; let (ref loaded, needs_reflow) = *loaded;
if *loaded == url { if *loaded == url {
*page_url = Some((loaded.clone(), false)); *page.mut_url() = Some((loaded.clone(), false));
if needs_reflow { if needs_reflow {
page.damage(ContentChangedDocumentDamage); page.damage(ContentChangedDocumentDamage);
page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor); page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor);
@ -824,7 +822,6 @@ impl ScriptTask {
return; return;
} }
} }
}
let cx = self.js_runtime.cx(); let cx = self.js_runtime.cx();
// Create the window and document objects. // Create the window and document objects.