From 5299672a5bb52904cc6b9555be704af2cdc18eba Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Mon, 22 Jul 2024 11:43:22 -0400 Subject: [PRISM] Fix memory leak in constants For example, the following code leaks: code = 1000.times.map { |i| "var#{i} = 1" }.join("\n") 10.times do 1000.times do RubyVM::InstructionSequence.compile_prism(code) end puts `ps -o rss= -p #{$$}` end Before: 70384 88032 103856 115712 125584 132768 144784 152624 165296 180608 After: 62368 78784 74512 87712 85072 77728 69424 74992 71264 81440 --- prism_compile.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/prism_compile.c b/prism_compile.c index 50a8c87e7d..713635f033 100644 --- a/prism_compile.c +++ b/prism_compile.c @@ -9744,6 +9744,8 @@ pm_parse_result_free(pm_parse_result_t *result) { if (result->parsed) { pm_node_destroy(&result->parser, result->node.ast_node); + + xfree(result->node.constants); pm_scope_node_destroy(&result->node); } -- cgit v1.2.3