[ruby-core:66768] [ruby-trunk - Bug #10583] Process.spawn stalls forever opening named pipes (fifo)

From: ruby-lang.org@...
Date: 2014-12-10 16:34:54 UTC
List: ruby-core #66768
Issue #10583 has been updated by Justin Greer.


While open(2) blocks, the spawn should NOT block.  Only the spawned process itself should block waiting on the open() - the parent process should continue, and should not require threads to make this happen.

Using the system calls directly this would not happen; it's an artifact of the way Ruby is trying to send status information between the spawned process and the parent process.  Please reopen this ticket so the bug can be fixed.

----------------------------------------
Bug #10583: Process.spawn stalls forever opening named pipes (fifo)
https://bugs.ruby-lang.org/issues/10583#change-50351

* Author: Justin Greer
* Status: Rejected
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Ruby's implementation of Process.spawn seems to attempt to send error/success information from the spawned process back to the parent, and the parent won't continue until it gets this information.  However, a named pipe (fifo) is mapped to the spawned process' IO, it will stall opening the IO stream, and never be able to send the error/success status back to the parent.

While stalled, the parent process is sitting here: https://github.com/ruby/ruby/blob/ruby_2_1/process.c#L3403  This prevents spawning multiple commands that communicate through a named pipe.

Example testcase is attached.

---Files--------------------------------
spawn_bug_example.rb (486 Bytes)


-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next