This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 9ef9ecc946e614405de5d7a7773ad33537684bb2 Author: Nikita Timofeev <stari...@gmail.com> AuthorDate: Mon Mar 10 17:09:45 2025 +0400 CAY-2876 Memory leak in the ObjectStore - clean up tracked paths when corresponding object is removed --- cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java b/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java index 8800fd5e8..00309af49 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java @@ -423,6 +423,9 @@ public class ObjectStore implements Serializable, SnapshotEventListener, GraphMa switch (object.getPersistenceState()) { case PersistenceState.DELETED: objectMap.remove(id); + if(trackedFlattenedPaths != null) { + trackedFlattenedPaths.remove(id); + } object.setObjectContext(null); object.setPersistenceState(PersistenceState.TRANSIENT); break; @@ -642,9 +645,11 @@ public class ObjectStore implements Serializable, SnapshotEventListener, GraphMa if (delegate.shouldProcessDelete(object)) { objectMap.remove(nodeId); changes.remove(nodeId); + if(trackedFlattenedPaths != null) { + trackedFlattenedPaths.remove(nodeId); + } - // setting DataContext to null will also set - // state to transient + // setting DataContext to null will also set state to transient object.setObjectContext(null); delegate.finishedProcessDelete(object); }