From 928960d906720c95e1759620b78307a4bbddf879 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 2 Dec 2020 10:38:43 +0100 Subject: [PATCH] Make sweep-on-decrement more aggressive We are holding off on cleaning if we have a parent, which effectively means we not start sweeping children until that process is initiated from parent. This is needlessly conservative: we should actually be checking parent refcount and trigger cleanup as soon as we observe no explicit references. JIRA: YANGTOOLS-1184 Change-Id: Ief30aa03b760116540d77038fb8c78fd5b0daf5a Signed-off-by: Robert Varga --- .../yang/parser/stmt/reactor/ReactorStmtCtx.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java index 0de3e281e3..3fc51ceb6a 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java @@ -175,11 +175,14 @@ abstract class ReactorStmtCtx, E extends Effec // Called when this statement does not have an implicit reference and have reached REFCOUNT_NONE private void sweepOnDecrement() { LOG.trace("Sweeping on decrement {}", this); - final ReactorStmtCtx parent = parentStmtCtx(); - if (parent == null) { - // We are the top-level object and have lost a reference. Trigger sweep if possible and we are done. + if (noParentRefcount()) { + // No further parent references, sweep our state. sweepState(); - } else { + } + + // Propagate towards parent if there is one + final ReactorStmtCtx parent = parentStmtCtx(); + if (parent != null) { parent.sweepOnChildDecrement(); } } -- 2.36.6