From 9bd2f30d0a73e5fd01aa80cfb5fd1c61b9ef64ff Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Thu, 3 Oct 2024 12:16:36 +0900 Subject: [ruby/reline] Fix FD leaks (https://github.com/ruby/reline/pull/752) `PTY.spawn` with a block detaches the spawned process and leaves it running in background even after exiting the given block. It is the responsibility of the caller to clean up the yielded IOs and PID. https://github.com/ruby/ruby/actions/runs/11148759246/job/30986064044#step:13:950 ``` Leaked file descriptor: Reline::Test#test_tty_amibuous_width: 9 : # Leaked file descriptor: Reline::Test#test_tty_amibuous_width: 10 : # Leaked file descriptor: Reline::Test#test_tty_amibuous_width: 11 : # Leaked file descriptor: Reline::Test#test_tty_amibuous_width: 12 : # Leaked file descriptor: Reline::Test#test_tty_amibuous_width: 13 : # Leaked file descriptor: Reline::Test#test_tty_amibuous_width: 14 : # ``` https://github.com/ruby/reline/commit/f9f90da9e4 --- test/reline/test_reline.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb index 22437eef9b..4134beac80 100644 --- a/test/reline/test_reline.rb +++ b/test/reline/test_reline.rb @@ -454,6 +454,9 @@ class Reline::Test < Reline::TestCase loop { break if r.readpartial(1024).include?("\e[6n") } w.puts "hello\e[10;#{ambiguous_width + 1}Rworld" assert_include(r.gets, [ambiguous_width, 'helloworld'].inspect) + ensure + r.close + w.close Process.waitpid pid end end @@ -463,6 +466,9 @@ class Reline::Test < Reline::TestCase loop { break if r.readpartial(1024).include?("\e[6n") } w.puts "hello\e[10;2Sworld" assert_include(r.gets, [1, "hello\e[10;2Sworld"].inspect) + ensure + r.close + w.close Process.waitpid pid end end -- cgit v1.2.3