Project

General

Profile

Actions

Bug #11200

closed

Memory leak of method entries

Added by ko1 (Koichi Sasada) almost 9 years ago. Updated almost 9 years ago.

Status:
Closed
Target version:
-
[ruby-core:69420]

Description

def recur
  Class.new{
    define_method(:foo) do
      recur
    end
  }.new.foo
end

begin
  recur
rescue SystemStackError
  retry
end

This program increase memory consumption because method entries in method frames (running method entries) are not freed when classes/modules are freed.

I will solve this issue by changing method frame data structures soon.
However, it will be very big change, it is difficult to apply 2.2 and before.
It is very rare case, so I don't think it is critical issue to fix older versions.

Actions #1

Updated by ko1 (Koichi Sasada) almost 9 years ago

  • Status changed from Open to Closed

Applied in changeset r50728.


  • method.h: make rb_method_entry_t a VALUE.
    Motivation and new data structure are described in [Bug #11203].
    This patch also solve the following issues.
    • [Bug #11200] Memory leak of method entries
    • [Bug #11046] callee returns incorrect method name in orphan
      proc
  • test/ruby/test_method.rb: add a test for [Bug #11046].
  • vm_core.h: remvoe rb_control_frame_t::me. me is located at value
    stack.
  • vm_core.h, gc.c, vm_method.c: remove unlinked_method... codes
    because method entries are simple VALUEs.
  • method.h: Now, all method entries has own independent method
    definititons. Strictly speaking, this change is not essential,
    but for future changes.
    • rb_method_entry_t::flag is move to rb_method_definition_t::flag.
    • rb_method_definition_t::alias_count is now
      rb_method_definition_t::alias_count_ptr, a pointer to the counter.
  • vm_core.h, vm_insnhelper.c (rb_vm_frame_method_entry) added to
    search the current method entry from value stack.
  • vm_insnhelper.c (VM_CHECK_MODE): introduced to enable/disable
    assertions.

Updated by usa (Usaku NAKAMURA) almost 9 years ago

  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.0.0: WONTFIX, 2.1: WONTFIX, 2.2: UNKNOWN
Actions

Also available in: Atom PDF

Like0
Like0Like0