Bug #11200
closed
Memory leak of method entries
Added by ko1 (Koichi Sasada) over 9 years ago.
Updated about 9 years ago.
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.
- 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.
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.0.0: WONTFIX, 2.1: WONTFIX, 2.2: UNKNOWN
Also available in: Atom
PDF
Like0
Like0Like0