[ruby-core:117854] [Ruby master Bug#20485] Simple use of Fiber makes GC leak objects with singleton method
From:
"byroot (Jean Boussier) via ruby-core" <ruby-core@...>
Date:
2024-05-13 06:18:40 UTC
List:
ruby-core #117854
Issue #20485 has been updated by byroot (Jean Boussier).
I closed because I tried your repro script with `ruby 3.3.1 (2024-04-23 revision c56cd86388) [arm64-darwin23]` both with `1.times` and `Mutex.new.synchronize` and it doesn't fail.
Also your description really fit [Bug #19436], hence why I considered it a duplicate.
If you say you can reproduce it on 3.3.1, I'll re-open, but then I have no explanation why it doesn't reproduce on my machine.
----------------------------------------
Bug #20485: Simple use of Fiber makes GC leak objects with singleton method
https://bugs.ruby-lang.org/issues/20485#change-108262
* Author: skhrshin (Shintaro Sakahara)
* Status: Closed
* ruby -v: ruby 3.2.4 (2024-04-23 revision af471c0e01) [x86_64-linux]
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
I found a possible memory leak which occurs only when several conditions are met.
The code to reproduce the problem is below:
```
class Work
def add_method
singleton_class.define_method(:f) {}
end
end
1.times { Fiber.new {}.resume }
work = Work.new
work.add_method
work = nil
GC.start
num_objs = ObjectSpace.each_object.select { |o| o.is_a?(Work) rescue false }.size
unless num_objs.zero?
raise "NG"
end
```
Expected result: The script exits normally.
Actual result: RuntimeError "NG" is raised.
If I change `1.times { Fiber.new {}.resume }` to just `Fiber.new {}.resume` or remove `work.add_method`, GC works as expected.
Is there any problem at the way to use Fiber in this code, or is it a bug due to Ruby?
I tested ruby 3.3.1 (2024-04-23 revision c56cd86388) [x86_64-linux] too and the result was a little different. The code above didn't reproduce the problem, but if I changed `1.times` to `Mutex.new.synchronize`, it was able to reproduce.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/