aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2024-07-22 11:43:22 -0400
committerPeter Zhu <peter@peterzhu.ca>2024-07-22 14:22:47 -0400
commit5299672a5bb52904cc6b9555be704af2cdc18eba (patch)
treea51dbc1eaa728c105e747385a59589b9f50096fe
parent34adc07372c10170b8ca36111d216cbd8e4699be (diff)
downloadruby-5299672a5bb52904cc6b9555be704af2cdc18eba.tar.gz
[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
-rw-r--r--prism_compile.c2
1 files changed, 2 insertions, 0 deletions
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);
}