[#62297] Re: [ruby-cvs:52906] nari:r45760 (trunk): * gc.c (gc_after_sweep): suppress unnecessary expanding heap. — Eric Wong <normalperson@...>
nari@ruby-lang.org wrote:
7 messages
2014/05/02
[#62307] Re: [ruby-cvs:52906] nari:r45760 (trunk): * gc.c (gc_after_sweep): suppress unnecessary expanding heap.
— SASADA Koichi <ko1@...>
2014/05/03
(2014/05/03 4:41), Eric Wong wrote:
[#62402] Re: [ruby-cvs:52906] nari:r45760 (trunk): * gc.c (gc_after_sweep): suppress unnecessary expanding heap.
— Eric Wong <normalperson@...>
2014/05/05
SASADA Koichi <ko1@atdot.net> wrote:
[#62523] [ruby-trunk - Feature #9632] [PATCH 0/2] speedup IO#close with linked-list from ccan — ko1@...
Issue #9632 has been updated by Koichi Sasada.
3 messages
2014/05/11
[#62556] doxygen (Re: Re: [ruby-trunk - Feature #9632] [PATCH 0/2] speedup IO#close with linked-list from ccan) — Tanaka Akira <akr@...>
2014-05-11 8:50 GMT+09:00 Eric Wong <normalperson@yhbt.net>:
3 messages
2014/05/13
[#62727] [RFC] vm_method.c (rb_method_entry_make): avoid freed me in m_tbl — Eric Wong <normalperson@...>
rb_unlink_method_entry may cause old_me to be swept before the new
7 messages
2014/05/24
[#63039] Re: [RFC] vm_method.c (rb_method_entry_make): avoid freed me in m_tbl
— SASADA Koichi <ko1@...>
2014/06/10
Hi,
[#63077] Re: [RFC] vm_method.c (rb_method_entry_make): avoid freed me in m_tbl
— Eric Wong <normalperson@...>
2014/06/10
SASADA Koichi <ko1@atdot.net> wrote:
[#63086] Re: [RFC] vm_method.c (rb_method_entry_make): avoid freed me in m_tbl
— SASADA Koichi <ko1@...>
2014/06/11
(2014/06/11 4:47), Eric Wong wrote:
[#63087] Re: [RFC] vm_method.c (rb_method_entry_make): avoid freed me in m_tbl
— Eric Wong <normalperson@...>
2014/06/11
SASADA Koichi <ko1@atdot.net> wrote:
[#62862] [RFC] README.EXT: document rb_gc_register_mark_object — Eric Wong <normalperson@...>
Any comment on officially supporting this as part of the C API?
5 messages
2014/05/30
[ruby-core:62278] [ruby-trunk - Feature #9785] Feature Proposal: Dir.chdir Thread Safety
From:
nobu@...
Date:
2014-05-02 03:47:39 UTC
List:
ruby-core #62278
Issue #9785 has been updated by Nobuyoshi Nakada.
And if you want to discard output from the child process:
~~~ruby
system(command, *args, chdir: dir, out: IO::NULL) # discard stdout only
system(command, *args, chdir: dir, out: IO::NULL, err: [:child, :out]) # also stderr
~~~
----------------------------------------
Feature #9785: Feature Proposal: Dir.chdir Thread Safety
https://bugs.ruby-lang.org/issues/9785#change-46443
* Author: Richard Schneeman
* Status: Rejected
* Priority: Normal
* Assignee:
* Category: core
* Target version: current: 2.2.0
----------------------------------------
I am proposing that `Dir.chdir` with a block be local to the current thread and any threads that are created inside of that block. `FileUtils.cd` and `FileUtils.chdir` should also behave the same way.
Currently `Dir.chdir` will change the directory for the entire process. This makes writing a program that modifies different directories in threads very difficult. Here is some ruby code that demonstrates the problem:
```ruby
# /tmp/code.rb
require 'fileutils'
FileUtils.mkdir_p("/tmp/foo")
FileUtils.mkdir_p("/tmp/bar")
threads = []
threads << Thread.new do
Dir.chdir("/tmp/foo") do
puts "Thread in Dir.chdir('/tmp/foo') pwd: #{`pwd`}"
end
end
threads << Thread.new do
puts "Thread without Dir.chdir pwd: #{`pwd`}"
end
threads.map(&:join)
```
When you run it you get different results:
```
$ ruby /tmp/code.rb
Thread without Dir.chdir pwd: /tmp
Thread in Dir.chdir('/tmp/foo') pwd: /private/tmp/foo
$ ruby /tmp/code.rb
Thread in Dir.chdir('/tmp/foo') pwd: /private/tmp/foo
Thread without Dir.chdir pwd: /private/tmp/foo
```
This is because Dir.chdir is not limited to the scope of the block but rather changes the working directory globally for the entire process including different threads.
Threads in MRI are very good for reading and writing to the disk, however many times a programmer wishes to read or write to disk they will want to use `Dir.chdir`. The current behavior of `Dir.chdir` prevents a programmer from changing directory inside of threads and can be very confusing for anyone who does not know this behavior.
For a better programming experience either we can make `Dir.chdir` thread aware, or introduce a new way to change the directory inside of a new thread such as `Dir.threadsafe_chdir`, I believe the first option is the best.
--
https://bugs.ruby-lang.org/