Project

General

Profile

« Previous | Next » 

Revision 82b57d7b

Added by peterzhu2118 (Peter Zhu) almost 2 years ago

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