[ruby-core:113381] [Ruby master Bug#19624] Backticks - IO object leakage
From:
pineman via ruby-core <ruby-core@...>
Date:
2023-04-30 14:56:37 UTC
List:
ruby-core #113381
Issue #19624 has been reported by pineman (Jo=E3o Pinheiro).
----------------------------------------
Bug #19624: Backticks - IO object leakage
https://bugs.ruby-lang.org/issues/19624
* Author: pineman (Jo=E3o Pinheiro)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [arm64-darwin22]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
Hi,
This code works on ruby 3.0.6:
```ruby
`echo`
ObjectSpace.each_object(IO) do |io|
if ![STDIN, STDOUT, STDERR].include?(io)
io.close
end
end
```
but raises `IOError` on 3.2.2:
```
minimal-repro-case.rb:8:in `close': uninitialized stream (IOError)
```
I found it started failing on ruby 3.1.0 and after, on macOS and Linux.
This code is useful for closing unneeded IO objects in forked processes. It=
looks like backticks is 'leaking' IO objects, waiting for GC, and it didn'=
t used to in 3.1.0.
In ruby 3.1.0, inside `rb_f_backquote`, `rb_gc_force_recycle` was removed i=
n favor of `RB_GC_GUARD`. I wonder if this has something to do with the pro=
blem.
Is this code incorrect since ruby 3.1.0 or is it a bug in ruby?
Thanks.
---Files--------------------------------
minimal-repro-case.rb (109 Bytes)
--=20
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-c=
ore.ml.ruby-lang.org/