[#61424] [REJECT?] xmalloc/xfree: reduce atomic ops w/ thread-locals — Eric Wong <normalperson@...>

I'm unsure about this. I _hate_ the extra branches this adds;

13 messages 2014/03/12

[ruby-core:61411] [ruby-trunk - Bug #9617] Windows7 issue with Kernel.spawn close_others => false

From: lionel.perrin@...
Date: 2014-03-11 11:14:02 UTC
List: ruby-core #61411
Issue #9617 has been updated by Lionel PERRIN.


Thanks for the answer.

Two last questions:

* Is there a technical reason why it is not supported ?

I've looked at the ruby source code. From my understanding, the CreateProcess call is made with inheritHandles set to true, which should make possible to transfer handles. Nevertheless, CreatePipe call is made in a way that forbid this handle to be inherited. Wouldn't it be possible to change this ?

* Wouldn't it be worth updating the documentation ? It is not specified that the Kernel.spawn command is limited on windows.

----------------------------------------
Bug #9617: Windows7 issue with Kernel.spawn close_others => false
https://bugs.ruby-lang.org/issues/9617#change-45721

* Author: Lionel PERRIN
* Status: Rejected
* Priority: Normal
* Assignee: 
* Category: platform/mingw
* Target version: 
* ruby -v: ruby 2.0.0p451 (2014-02-24) [i386-mingw32]
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
I faced an issue while trying to inherit a file or pipe handle from a master process to its child on windows 7.

I tried this implementation:

* master.rb:

~~~
rd, wr = IO.pipe
puts "Pipe opened: #{rd.fileno} <= #{wr.fileno}"
cmd = "ruby child.rb #{rd.fileno}"
pid = Kernel.spawn cmd, :close_others => false
wr.write "Hello World\n"
Process.wait pid
~~~

* child.rb:

~~~
puts "Child:Start #{ARGV}"
rd = IO.new(ARGV[0].to_i, mode: "r")
puts rd.read
~~~

On windows I get the following output while it works fine on linux.

~~~
Pipe opened: 3 <= 4
Child:Start ["3"]
child.rb:2:in `initialize': Bad file descriptor (Errno::EBADF)
        from child.rb:2:in `new'
        from child.rb:2:in `<main>'
~~~

Note: the same test with the fileno of a file opened from master.rb lead to the same exception in child.rb




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

In This Thread

Prev Next