aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatt Brubeck <mbrubeck@limpet.net>2014-04-21 16:04:16 -0700
committerMatt Brubeck <mbrubeck@limpet.net>2014-04-21 16:06:01 -0700
commitb38f7d26d1666ae0801cef46b8c4f7cd0a8ee4be (patch)
treece211624302b0a630dd05cde2b643dbbc37f490a /src
parentc6bdc7b7f2d39b522be5767f09f88b1b4ca5577a (diff)
downloadservo-b38f7d26d1666ae0801cef46b8c4f7cd0a8ee4be.tar.gz
servo-b38f7d26d1666ae0801cef46b8c4f7cd0a8ee4be.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/components/main/pipeline.rs3
-rw-r--r--src/components/script/script_task.rs21
2 files changed, 11 insertions, 13 deletions
diff --git a/src/components/main/pipeline.rs b/src/components/main/pipeline.rs
index 2ed978360ac..78ebd91c868 100644
--- a/src/components/main/pipeline.rs
+++ b/src/components/main/pipeline.rs
@@ -202,7 +202,8 @@ impl Pipeline {
}
pub fn reload(&self) {
- self.url.borrow().clone().map(|url| {
+ let url = self.url.borrow().clone();
+ url.map(|url| {
self.load(url);
});
}
diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs
index f8e7d230420..1390071435e 100644
--- a/src/components/script/script_task.rs
+++ b/src/components/script/script_task.rs
@@ -810,19 +810,16 @@ impl ScriptTask {
is a bug.");
let page = page_tree.page();
- {
- let mut page_url = page.mut_url();
- let last_loaded_url = replace(&mut *page_url, None);
- for loaded in last_loaded_url.iter() {
- let (ref loaded, needs_reflow) = *loaded;
- if *loaded == url {
- *page_url = Some((loaded.clone(), false));
- if needs_reflow {
- page.damage(ContentChangedDocumentDamage);
- page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor);
- }
- return;
+ let last_loaded_url = replace(&mut *page.mut_url(), None);
+ for loaded in last_loaded_url.iter() {
+ let (ref loaded, needs_reflow) = *loaded;
+ if *loaded == url {
+ *page.mut_url() = Some((loaded.clone(), false));
+ if needs_reflow {
+ page.damage(ContentChangedDocumentDamage);
+ page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor);
}
+ return;
}
}