Actions
Bug #19896
closedRuby method refinement memory leak
Description
GitHub pull request: https://github.com/ruby/ruby/pull/8487
When method redefinitions happen, sometimes the final definition does not get cleaned up,
Reproducable with the same script from: https://bugs.ruby-lang.org/issues/19894
10.times do
20_000.times do
$c = Class.new do
def foo; end
end
$m = Module.new do
refine $c do
def foo; end
end
end
Class.new do
using $m
def initialize
o = $c.new
o.method(:foo).unbind
end
end.new
end
puts `ps -o rss= -p #{$$}`
end
before:
19792
20944
22224
23504
24784
26064
27344
28624
29776
31056
after:
18560
18560
18560
18560
18560
18560
18560
18560
18560
18560
Updated by peterzhu2118 (Peter Zhu) over 1 year ago
- Backport changed from 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN to 3.0: UNKNOWN, 3.1: REQUIRED, 3.2: REQUIRED
Updated by HParker (Adam Hess) over 1 year ago
- Status changed from Open to Closed
Applied in changeset git|8b236e0c66da8f92e9fc33de66cfbc8e4b0c0763.
[Bug #19896]
fix memory leak in vm_method
This introduces a unified reference_count to clarify who is referencing a method.
This also allows us to treat the refinement method as the def owner since it counts itself as a reference
Co-authored-by: Peter Zhu peter@peterzhu.ca
Updated by nagachika (Tomoyuki Chikanaga) over 1 year ago
- Backport changed from 3.0: UNKNOWN, 3.1: REQUIRED, 3.2: REQUIRED to 3.0: UNKNOWN, 3.1: REQUIRED, 3.2: DONE
ruby_3_2 97b7070ebd5493de8d3a6a9b0ecc91bef5068d3f merged revision(s) 8b236e0c66da8f92e9fc33de66cfbc8e4b0c0763.
Actions
Like0
Like0Like0Like0