mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Make LOCAL_CONTEXT_KEY safe and non-leaky.
`LOCAL_CONTEXT_KEY` is currently a `Cell<*mut LocalLayoutContext>`. The use of the raw pointer means that the `LocalLayoutContext` is not dropped when the thread dies; this leaks FreeType instances and probably other things. There are also some unsafe getter functions in `LayoutContext` (`font_context`, `applicable_declarations_cache` and `style_sharing_candidate_cache`) that @eddyb says involve undefined behaviour. This changeset changes `LOCAL_CONTEXT_KEY` to `RefCell<Option<Rc<LocalLayoutContext>>>`. This fixes the leak and also results in safe getters. (Fixes #6282.)
This commit is contained in:
parent
2ca606aaba
commit
9b4d39d6d1
7 changed files with 38 additions and 48 deletions
|
@ -429,7 +429,7 @@ fn render_text(layout_context: &LayoutContext,
|
|||
info));
|
||||
// FIXME(pcwalton): This should properly handle multiple marker fragments. This could happen
|
||||
// due to text run splitting.
|
||||
let fragments = TextRunScanner::new().scan_for_runs(layout_context.font_context(), fragments);
|
||||
let fragments = TextRunScanner::new().scan_for_runs(&mut layout_context.font_context(), fragments);
|
||||
debug_assert!(fragments.len() >= 1);
|
||||
fragments.fragments.into_iter().next().unwrap().specific
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue