From bd25263eac24a04476e6882f1cff3a08242c01ed Mon Sep 17 00:00:00 2001 From: Grigorii Kirgizov Date: Tue, 15 Dec 2020 15:56:48 +0300 Subject: [PATCH] Fix leak of LogicalState in Occurrence observers: properly terminate occ-s --- .../src/jetbrains/mps/logic/reactor/core/Occurrence.kt | 8 +++----- .../logic/reactor/core/internal/EvaluationSessionImpl.kt | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Occurrence.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Occurrence.kt index 4a56c17e..e266f64f 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Occurrence.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Occurrence.kt @@ -65,11 +65,9 @@ class Occurrence (observable: LogicalStateObservable, override fun parentUpdated(logical: Logical<*>, controller: Controller) = doReactivate(controller) fun terminate(observable: LogicalStateObservable) { - if (alive) { - for (a in arguments) { - if (a is Logical<*>) { - observable.removeForwardingObserver(a, this) - } + for (a in arguments) { + if (a is Logical<*>) { + observable.removeForwardingObserver(a, this) } } alive = false diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/EvaluationSessionImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/EvaluationSessionImpl.kt index 5730fad5..54ea9e40 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/EvaluationSessionImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/EvaluationSessionImpl.kt @@ -211,10 +211,10 @@ internal class EvaluationSessionImpl private constructor ( val outputOccurrences = histView.filterOccurrences(inputStore) // todo: make output store in other processing strategies? + outputOccurrences.forEach{ it.terminate(logicalState) } processing.resetStore() // clear observers // todo: need clearing occurrenceContractObservers? (MPSCR-66) logicalState.reset() - outputOccurrences.forEach{ it.terminate(logicalState) } val rules = ruleIndex.toRules().filter(preambleInfo::inPreamble)