diff options
author | Matt Brubeck <mbrubeck@limpet.net> | 2014-04-21 16:04:16 -0700 |
---|---|---|
committer | Matt Brubeck <mbrubeck@limpet.net> | 2014-04-21 16:06:01 -0700 |
commit | b38f7d26d1666ae0801cef46b8c4f7cd0a8ee4be (patch) | |
tree | ce211624302b0a630dd05cde2b643dbbc37f490a /src | |
parent | c6bdc7b7f2d39b522be5767f09f88b1b4ca5577a (diff) | |
download | servo-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.rs | 3 | ||||
-rw-r--r-- | src/components/script/script_task.rs | 21 |
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; } } |