From 26344aa1561b2a82c5c14ba3efddf800ff8b020c Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 2 Sep 2021 18:28:38 +0200 Subject: [PATCH] Do not retain reference to StatementMap Once we have finished iterating, we do not need to retain a reference to the StatementMap. Promote Regular's iterator to a named class and clear the reference as soon as we are done. Eliminates a YKP's report of a possible leak. Change-Id: Iabab24b2b1c2b28dd882ae10fac32f99c4d1c3a5 Signed-off-by: Robert Varga --- .../parser/stmt/reactor/StatementMap.java | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementMap.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementMap.java index d837b93ba6..7c3528aced 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementMap.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementMap.java @@ -135,21 +135,29 @@ abstract class StatementMap extends AbstractCollection> iterator() { - return new AbstractIterator<>() { - private int nextOffset = 0; - - @Override - protected AbstractResumedStatement computeNext() { - while (nextOffset < elements.length) { - final AbstractResumedStatement ret = elements[nextOffset++]; - if (ret != null) { - return ret; - } - } + return new Iter(this); + } + + private static final class Iter extends AbstractIterator> { + private int nextOffset = 0; + private Regular map; + + Iter(final Regular map) { + this.map = requireNonNull(map); + } - return endOfData(); + @Override + protected AbstractResumedStatement computeNext() { + while (nextOffset < map.elements.length) { + final AbstractResumedStatement ret = map.elements[nextOffset++]; + if (ret != null) { + return ret; + } } - }; + + map = null; + return endOfData(); + } } } -- 2.36.6