aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2017-05-21 02:50:16 +0200
committerEmilio Cobos Álvarez <emilio@crisal.io>2017-05-21 03:06:37 +0200
commitcf6b3a0fcb79f87b1140dc118091ebe9798c0563 (patch)
treee20b40a15614019707e65a71cd3012c09dec99c5
parente448c4a27ea780fd92804f33547c2f5f95abbf89 (diff)
downloadservo-cf6b3a0fcb79f87b1140dc118091ebe9798c0563.tar.gz
servo-cf6b3a0fcb79f87b1140dc118091ebe9798c0563.zip
style: Simplify the rule tree GC code a bit.
-rw-r--r--components/style/rule_tree/mod.rs21
1 files changed, 8 insertions, 13 deletions
diff --git a/components/style/rule_tree/mod.rs b/components/style/rule_tree/mod.rs
index 5fd963e3d49..8eaae85cb2f 100644
--- a/components/style/rule_tree/mod.rs
+++ b/components/style/rule_tree/mod.rs
@@ -855,20 +855,15 @@ impl StrongRuleNode {
debug_assert!(me.is_root(), "Can't call GC on a non-root node!");
while let Some(weak) = self.pop_from_free_list() {
- let needs_drop = {
- let node = &*weak.ptr();
- if node.refcount.load(Ordering::Relaxed) == 0 {
- node.remove_from_child_list();
- true
- } else {
- false
- }
- };
-
- debug!("GC'ing {:?}: {}", weak.ptr(), needs_drop);
- if needs_drop {
- let _ = Box::from_raw(weak.ptr());
+ let node = &*weak.ptr();
+ if node.refcount.load(Ordering::Relaxed) != 0 {
+ // Nothing to do, the node is still alive.
+ continue;
}
+
+ debug!("GC'ing {:?}", weak.ptr());
+ node.remove_from_child_list();
+ let _ = Box::from_raw(weak.ptr());
}
me.free_count.store(0, Ordering::Relaxed);