Issue #20311 has been updated by byroot (Jean Boussier).
Is there any chance for the same module to be added
twice?
Yes, aliasing isn't uncommon.
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.
Yes, my reasoning is that it's not reasonable to expect classes created in Ruby to be
immortal and immovable like the ones created in C.
----------------------------------------
Bug #20311: Struct.new("A") memory leak?
https://bugs.ruby-lang.org/issues/20311#change-107090
* 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/