[#61822] Plan Developers Meeting Japan April 2014 — Zachary Scott <e@...>
I would like to request developers meeting around April 17 or 18 in this mo=
14 messages
2014/04/03
[#61825] Re: Plan Developers Meeting Japan April 2014
— Urabe Shyouhei <shyouhei@...>
2014/04/03
It's good if we have a meeting then.
[#61826] Re: Plan Developers Meeting Japan April 2014
— Zachary Scott <e@...>
2014/04/03
Regarding openssl issues, I=E2=80=99ve discussed possible meeting time with=
[#61833] Re: Plan Developers Meeting Japan April 2014
— Martin Bo煬et <martin.bosslet@...>
2014/04/03
Hi,
[#61847] Re: Plan Developers Meeting Japan April 2014
— Eric Wong <normalperson@...>
2014/04/03
Martin Boテ殕et <martin.bosslet@gmail.com> wrote:
[#61849] Re: Plan Developers Meeting Japan April 2014
— Zachary Scott <e@...>
2014/04/04
I will post summary of meeting on Google docs after the meeting.
[#61852] Re: Plan Developers Meeting Japan April 2014
— Eric Wong <normalperson@...>
2014/04/04
Zachary Scott <e@zzak.io> wrote:
[#61860] Re: Plan Developers Meeting Japan April 2014
— Zachary Scott <e@...>
2014/04/04
I=E2=80=99m ok with redmine, thanks for bringing up your concern!
[#62076] Candidacy to 2.1 branch maintainer. — Tomoyuki Chikanaga <nagachika00@...>
Hello,
7 messages
2014/04/17
[#62078] Re: Candidacy to 2.1 branch maintainer.
— SHIBATA Hiroshi <shibata.hiroshi@...>
2014/04/17
> And does anyone have counter proposal for 2.1 maintenance?
[ruby-core:62222] [ruby-trunk - Feature #9785] Feature Proposal: Dir.chdir Thread Safety
From:
normalperson@...
Date:
2014-04-29 16:49:49 UTC
List:
ruby-core #62222
Issue #9785 has been updated by Eric Wong.
richard.schneeman@gmail.com wrote:
> It's come to my attention that this is fairly hardcoded into the OS
> (changing CWD is a per-process operation rather than a per-thread
> one). I do not have a proposed implementation for how to change
> directory within a thread, perhaps we could take ideas from another
> language allows this functionality if there are any.
Right, this is one of the reasons the *at family of syscalls
(openat, renameat, etc...) was introduced into POSIX.
Adding support for those might be good idea. However, OS support
outside Linux/Solaris is probably still limited at the moment.
Linux also allows unsetting the CLONE_FS flag for cloned threads,
but that's completely unportable.
----------------------------------------
Feature #9785: Feature Proposal: Dir.chdir Thread Safety
https://bugs.ruby-lang.org/issues/9785#change-46370
* Author: Richard Schneeman
* Status: Open
* 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/