| It seems to hang on ruby MRI too... at least File.read:
require 'tempfile' |
|
dir = '/tmp/dir' |
link = '/tmp/link' |
|
File.unlink(link) if File.exist?(link) |
Dir.mkdir(dir) unless File.directory?(dir) |
link = File.symlink(dir, link) |
|
puts "Opening" |
File.open(link, File::RDONLY) do |fh| |
puts "Opened" |
puts fh.read |
puts "Done" |
end
|
# strace -f ruby linkbug.rb |
... |
[pid 14513] stat("/tmp/link", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 |
[pid 14513] unlink("/tmp/link") = 0 |
[pid 14513] stat("/tmp/dir", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 |
[pid 14513] symlink("/tmp/dir", "/tmp/link") = 0 |
[pid 14513] writev(1, [{iov_base="Opening", iov_len=7}, {iov_base="\n", iov_len=1}], 2Opening |
) = 8 |
[pid 14513] fcntl(0, F_GETFL) = 0x2 (flags O_RDWR) |
[pid 14513] ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0 |
[pid 14513] writev(1, [{iov_base="Opened", iov_len=6}, {iov_base="\n", iov_len=1}], 2Opened |
) = 7 |
[pid 14513] fstat(0, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0 |
[pid 14513] read(0, |
# ruby is hung here ^
|
|