summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-01-27 00:28:39 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-01-27 15:46:08 +0900
commite89d80702bd98a8276243a7fcaa2a158b3bfb659 (patch)
tree7508f7d54158336e4486aa94c4b78b34dc8de3e0 /test/ruby
parent7ff1bf317887c0d7b21e91ad548d07b9f05c540c (diff)
Fix memory leak at the same named alias [Bug #18516]
When aliasing a method to the same name method, set a separate bit flag on that method definition, instead of the reference count increment. Although this kind of alias has no actual effect at runtime, is used as the hack to suppress the method re-definition warning.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/5493
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_alias.rb18
1 files changed, 18 insertions, 0 deletions
diff --git a/test/ruby/test_alias.rb b/test/ruby/test_alias.rb
index c6fad25cc2..99f2223b49 100644
--- a/test/ruby/test_alias.rb
+++ b/test/ruby/test_alias.rb
@@ -264,4 +264,22 @@ class TestAlias < Test::Unit::TestCase
end
end;
end
+
+ def test_alias_memory_leak
+ assert_no_memory_leak([], "#{<<~"begin;"}", "#{<<~'end;'}", rss: true)
+ begin;
+ class A
+ 500.times do
+ 1000.times do |i|
+ define_method(:"foo_#{i}") {}
+
+ alias :"foo_#{i}" :"foo_#{i}"
+
+ remove_method :"foo_#{i}"
+ end
+ GC.start
+ end
+ end
+ end;
+ end
end