[#114774] [Ruby master Feature#19884] Make Safe Navigation Operator work on classes — "p8 (Petrik de Heus) via ruby-core" <ruby-core@...>
Issue #19884 has been reported by p8 (Petrik de Heus).
13 messages
2023/09/15
[ruby-core:114832] [Ruby master Bug#19624] Backticks - IO object leakage
From:
"Eregon (Benoit Daloze) via ruby-core" <ruby-core@...>
Date:
2023-09-20 11:16:47 UTC
List:
ruby-core #114832
Issue #19624 has been updated by Eregon (Benoit Daloze).
I think these IO objects should not be hidden. They are not leaked.
`ObjectSpace.each_object(IO) do |io| ... io.close` is incorrect, it needs t=
o account for possible IOError's.
----------------------------------------
Bug #19624: Backticks - IO object leakage
https://bugs.ruby-lang.org/issues/19624#change-104676
* Author: pineman (Jo=E3o Pinheiro)
* Status: Closed
* 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 did=
n't used to before 3.1.0.
In ruby 3.1.0, inside `rb_f_backquote` in `io.c`, `rb_gc_force_recycle` was=
removed in favor of `RB_GC_GUARD` (commit `aeae6e2842e`). I wonder if this=
has something to do with the problem.
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/