From: akr@... Date: 2018-07-19T09:15:01+00:00 Subject: [ruby-core:88007] [Ruby trunk Misc#14907] [PATCH] io.c: do not close inherited FDs by default Issue #14907 has been updated by akr (Akira Tanaka). I understand that FD inheritance dependent program doesn't work well with Ruby. But I doubt that all external library create FDs with close-on-exec now. spawn's close_others option would be useful workaround to avoid FD leak with such (problematic) library. So, I'm reluctant that removing close_others feature. It means that we lose the workaround. However, turn off close_others by default (for spawn and IO.popen) seems possible choice for me. It is difficult to see how many the problematic libraries actually exists with closing FDs by default. ---------------------------------------- Misc #14907: [PATCH] io.c: do not close inherited FDs by default https://bugs.ruby-lang.org/issues/14907#change-73025 * Author: normalperson (Eric Wong) * Status: Open * Priority: Normal * Assignee: akr (Akira Tanaka) ---------------------------------------- io.c: do not close inherited FDs by default While I fully agree Ruby should create FDs with close-on-exec by default (as it has since 2.0.0); I don't believe Ruby should be arbitrarily closing file descriptors it does not know about. The following is an example (using mwrap[1]) where closing inherited FDs is harmful. MWRAP=dump_fd:99 mwrap make -j4 exam 99>>mwrap.out I only found one minor regression from this change in test/lib/test/unit.rb as IO.new does not set close-on-exec when using jobserver FDs from make. A possible change is to make IO.new set FD_CLOEXEC by default. [1] https://80x24.org/mwrap/README.html ---Files-------------------------------- 0001-io.c-do-not-close-inherited-FDs-by-default.patch (4.45 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: