diff options
| author | Omar Rizwan <omar@omar.website> | 2023-07-04 15:13:47 +0000 |
|---|---|---|
| committer | Omar Rizwan <omar@omar.website> | 2023-07-04 15:13:47 +0000 |
| commit | 38d1d2273eb13274d828b80b467dbd8a91de9e4c (patch) | |
| tree | f015941fa07a14d4f59ca00012ac8a85c59c971a /lib | |
| parent | Experiment: avoid shimmering in When words (diff) | |
| download | folk-38d1d2273eb13274d828b80b467dbd8a91de9e4c.tar.gz folk-38d1d2273eb13274d828b80b467dbd8a91de9e4c.zip | |
Fix more leaks. This seems pretty good
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/evaluator.tcl | 9 |
1 files changed, 7 insertions, 2 deletions
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); |
