Actions
Bug #11200
closedMemory leak of method entries
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.
Updated by ko1 (Koichi Sasada) almost 10 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. - 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 10 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
Like0
Like0Like0