[ruby-core:98445] [Ruby master Bug#16900] Disposable call-cache introduced memory leak
From:
merch-redmine@...
Date:
2020-05-20 00:27:37 UTC
List:
ruby-core #98445
Issue #16900 has been reported by jeremyevans0 (Jeremy Evans).
----------------------------------------
Bug #16900: Disposable call-cache introduced memory leak
https://bugs.ruby-lang.org/issues/16900
* Author: jeremyevans0 (Jeremy Evans)
* Status: Open
* Priority: Normal
* Assignee: ko1 (Koichi Sasada)
* Backport: 2.5: DONTNEED, 2.6: DONTNEED, 2.7: DONTNEED
----------------------------------------
commit:b9007b6c548f91e88fd3f2ffa23de740431fa969 (Introduce disposable call-cache) introduced a memory leak for classes that include or prepend modules. Taking the example memory leak script used in the commit message for commit:5922c954614e5947a548780bb3b894626affe6dd:
```ruby
module M; def bar; end; end
loop{
Class.new do
def foo; end
prepend M
end
}
```
There is unbounded growth:
```
jeremy 56984 0.0 0.1 59540 14940 p2 S+ 5:15PM 0:00.19 ruby example.rb
jeremy 56984 0.0 0.1 61852 18640 p2 S+ 5:15PM 0:00.40 ruby example.rb
jeremy 56984 0.0 0.1 62700 19940 p2 S+ 5:15PM 0:00.62 ruby example.rb
jeremy 56984 0.0 0.1 63696 21364 p2 S+ 5:15PM 0:00.83 ruby example.rb
jeremy 56984 4.1 0.1 64632 22748 p2 S+ 5:15PM 0:01.05 ruby example.rb
jeremy 56984 4.1 0.1 65664 24188 p2 S+ 5:15PM 0:01.26 ruby example.rb
jeremy 56984 4.1 0.2 66632 25432 p2 S+ 5:15PM 0:01.47 ruby example.rb
jeremy 56984 4.1 0.2 67484 26552 p2 S+ 5:15PM 0:01.70 ruby example.rb
jeremy 56984 8.5 0.2 68456 27772 p2 S+ 5:15PM 0:01.92 ruby example.rb
jeremy 56984 8.5 0.2 69536 29164 p2 S+ 5:15PM 0:02.14 ruby example.rb
jeremy 56984 8.5 0.2 70424 30252 p2 S+ 5:15PM 0:02.36 ruby example.rb
```
This issue appears to be limited to classes that include or prepend modules.
* Same memory leak when switching from `prepend` to `include`
* No memory leak when switching from `Class.new` to `Module.new`
* No memory leak when removing the `prepend`
* No memory leak when removing the `prepend` and subclassing the class.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>