diff options
| author | nagachika <nagachika@ruby-lang.org> | 2024-07-07 14:42:08 +0900 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2024-07-07 16:46:02 +0900 |
| commit | c97a632363a170879b9755c5a123e92533908039 (patch) | |
| tree | 4d61f6e70b36e237afb616b62e2ad716fc12dae8 /include/ruby | |
| parent | bd5df1693c89d389471d145fc19b487c708912b1 (diff) | |
merge revision(s) 82b57d7bfeefd717c10f7a5a3484aca6b3e708a3: [Backport #20162]
Fix memory leak when duplicating too complex object
[Bug #20162]
Creating a ST table then calling st_replace leaks memory because the
st_replace overwrites the ST table without freeing any of the existing
memory. This commit changes it to use st_copy instead.
For example:
RubyVM::Shape.exhaust_shapes
o = Object.new
o.instance_variable_set(:@a, 0)
10.times do
100_000.times { o.dup }
puts `ps -o rss= -p #{$$}`
end
Before:
23264
33600
42672
52160
61600
71728
81056
90528
100560
109840
After:
14752
14816
15584
15584
15664
15664
15664
15664
15664
15664
Diffstat (limited to 'include/ruby')
0 files changed, 0 insertions, 0 deletions
