[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
This commit is contained in:
Peter Zhu 2024-07-22 11:43:22 -04:00
Родитель 34adc07372
Коммит 5299672a5b
1 изменённых файлов: 2 добавлений и 0 удалений

Просмотреть файл

@ -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);
}