diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-09-24 11:05:28 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-09-24 11:05:28 -0600 |
commit | 30ffd09eb3daf4b0bc55627c281016f8f246fd6f (patch) | |
tree | 5f77f78f7c8371ad24236dfea5d7d0fdfe01f527 | |
parent | 2d253cbf835df522595575fdd371e2068606271a (diff) | |
parent | f8cd0d9b3bd3924c0d99462bad25f4ad2dad8a01 (diff) | |
download | servo-30ffd09eb3daf4b0bc55627c281016f8f246fd6f.tar.gz servo-30ffd09eb3daf4b0bc55627c281016f8f246fd6f.zip |
Auto merge of #7675 - jgraham:freeze_crash, r=metajack
Prevent crash trying to freeze script task with no page.
This fixes a crash resulting from a race between loading an initial
document and navigating to a subsequent document. If the navigation
happens before the initial document has had a chance to create its
root page, we crash trying to unwrap a None. Note that the are likely
further similar timing issues with more complex sequences of navigation
and history manipulation.
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7675)
<!-- Reviewable:end -->
-rw-r--r-- | components/script/script_task.rs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 96ff1a751eb..1c3b6c2cd37 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -1282,6 +1282,11 @@ impl ScriptTask { /// Handles freeze message fn handle_freeze_msg(&self, id: PipelineId) { + // Workaround for a race condition when navigating before the initial page has + // been constructed c.f. https://github.com/servo/servo/issues/7677 + if self.page.borrow().is_none() { + return + }; let page = self.root_page(); let page = page.find(id).expect("ScriptTask: received freeze msg for a pipeline ID not associated with this script task. This is a bug."); |