Issue #20311 has been updated by nobu (Nobuyoshi Nakada).
byroot (Jean Boussier) wrote in #note-7:
So maybe a better short term solution that is easy to
backport is to just not use these API for naming structs:
https://github.com/ruby/ruby/pull/10144
Seems fine, but I'm afraid what can happen when an extension library stores
`rb_path2class("Struct::A")` result then remove that constant?
Probably this is same for any Ruby-level defined classes/modules.
----------------------------------------
Bug #20311: Struct.new("A") memory leak?
https://bugs.ruby-lang.org/issues/20311#change-107089
* Author: MaxLap (Maxime Lapointe)
* Status: Open
* ruby -v: 3.3.0
* Backport: 3.0: WONTFIX, 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED
----------------------------------------
The following code gives the impression of a memory leak.
```ruby
10.times do
5000.times do
Struct.new("A")
Struct.send(:remove_const, :A)
end
GC.start
puts `ps -o rss= -p #{$$}`.to_i
end
```
```
27868
35324
43400
51472
58676
66144
73764
81196
88512
95752
```
Is there another location where the struct gets set that I need to clear up for the GC
free the memory?
Happens in 3.2.2, 3.2.3, 3.3.0, 3.3-head, ruby-head.
--
https://bugs.ruby-lang.org/