mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Auto merge of #14273 - heycam:rule-tree-stylo, r=bholley,emilio
ensure RuleNodes are dropped when Gecko drops the Stylist <!-- Please describe your changes on the following line: --> These are the Servo-side patches from https://bugzilla.mozilla.org/show_bug.cgi?id=1318238, which already have been reviewed by @bholley and @emilio there. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14273) <!-- Reviewable:end -->
This commit is contained in:
commit
385e59e0f1
3 changed files with 17 additions and 2 deletions
|
@ -440,8 +440,7 @@ impl StrongRuleNode {
|
|||
// script.
|
||||
debug_assert!(!thread_state::get().is_worker() &&
|
||||
(thread_state::get().is_layout() ||
|
||||
(thread_state::get().is_script() &&
|
||||
me.refcount.load(Ordering::SeqCst) == 0)));
|
||||
thread_state::get().is_script()));
|
||||
let current = me.next_free.load(Ordering::SeqCst);
|
||||
|
||||
if current == FREE_LIST_SENTINEL {
|
||||
|
|
|
@ -624,6 +624,18 @@ impl Stylist {
|
|||
}
|
||||
}
|
||||
|
||||
impl Drop for Stylist {
|
||||
fn drop(&mut self) {
|
||||
// This is the last chance to GC the rule tree. If we have dropped all
|
||||
// strong rule node references before the Stylist is dropped, then this
|
||||
// will cause the rule tree to be destroyed correctly. If we haven't
|
||||
// dropped all strong rule node references before now, then we will
|
||||
// leak them, since there will be no way to call gc() on the rule tree
|
||||
// after this point.
|
||||
unsafe { self.rule_tree.gc(); }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Map that contains the CSS rules for a specific PseudoElement
|
||||
/// (or lack of PseudoElement).
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue