From 38d1d2273eb13274d828b80b467dbd8a91de9e4c Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Tue, 4 Jul 2023 11:13:47 -0400 Subject: Fix more leaks. This seems pretty good --- lib/evaluator.tcl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/evaluator.tcl b/lib/evaluator.tcl index d8ab616a..6889d005 100644 --- a/lib/evaluator.tcl +++ b/lib/evaluator.tcl @@ -604,8 +604,11 @@ namespace eval Statements { ;# singleton Statement store environment_t* resultsForFirstPattern[maxResultsCount]; int resultsForFirstPatternCount = searchByPattern(substitutedFirstPattern, maxResultsCount, resultsForFirstPattern); - resultsForFirstPatternCount += searchByPattern(claimizePattern(substitutedFirstPattern), + Tcl_Obj* claimizedSubstitutedFirstPattern = claimizePattern(substitutedFirstPattern); + resultsForFirstPatternCount += searchByPattern(claimizedSubstitutedFirstPattern, maxResultsCount - resultsForFirstPatternCount, &resultsForFirstPattern[resultsForFirstPatternCount]); + Tcl_DecrRefCount(substitutedFirstPattern); + Tcl_DecrRefCount(claimizedSubstitutedFirstPattern); for (int i = 0; i < resultsForFirstPatternCount; i++) { environment_t* result = resultsForFirstPattern[i]; if (env != NULL) { @@ -908,7 +911,6 @@ namespace eval Evaluator { int reactionCount = trieLookup(interp, reactions, 1000, reactionsToStatementAddition, clauseWithReactingIdWildcard); Tcl_DecrRefCount(clauseWithReactingIdWildcard); - // printf("React to %s: %d\n", Tcl_GetString(clauseWithReactingIdWildcard), reactionCount); for (int i = 0; i < reactionCount; i++) { reaction_t* reaction = (reaction_t*)(uintptr_t)reactions[i]; reaction->react(interp, reaction->reactingId, reaction->reactToPattern, id); @@ -1017,6 +1019,9 @@ namespace eval Evaluator { NULL, 1000, results, &resultsCount); + for (int i = 0; i < subpatternsCount; i++) { + Tcl_DecrRefCount(subpatterns[i]); + } } Tcl_Obj* matches = Tcl_NewListObj(0, NULL); -- cgit v1.2.3