[#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:61412] [ruby-trunk - Bug #9617] Windows7 issue with Kernel.spawn close_others => false

From: usa@...
Date: 2014-03-11 11:43:39 UTC
List: ruby-core #61412
Issue #9617 has been updated by Usaku NAKAMURA.


Lionel PERRIN wrote:
> * 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 ?

We do not have a way how specify which handle corresponds to which file descriptor to a child process.
First of all, we do not know whether a child process treats file descriptors or not.


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

I think so, too.


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

* 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