From: KOSAKI Motohiro Date: 2011-08-07T18:34:09+09:00 Subject: [ruby-core:38829] Re: [Ruby 1.9 - Bug #5135] Ruby 1.9.3-preview1 tests fails in Fedora Rawhide Hi Vit >> * test/io/console/test_io_console.rb (test_noctty): daemon() on >> � OpenBSD seems not to detach the controlling terminal, when the >> � argument noclose is non-zero. �ref: [Bug #5135] > > Nobu, you closed the issue but I am still fighting with four failed tests: https://gist.github.com/1127698 Following two failures seems point out a kernel issue. Can you please elaborate your filesystem, mount option, et al? Also, please show us your kernel and glibc version. 28) Failure: test_seek(TestDir) [/builddir/build/BUILD/ruby-1.9.3-preview1/test/ruby/test_dir.rb:39]: <".."> expected but was <"a">. 29) Failure: test_set_pos(TestDir) [/builddir/build/BUILD/ruby-1.9.3-preview1/test/ruby/test_dir.rb:81]: <".."> expected but was <"a">. And can you please try run following minimum script by using strace. -------------------------------------------------------------------------------------------------------- require 'fileutils' # setup @root = "testdir" FileUtils.remove_entry(@root, true) FileUtils.mkdir(@root) for i in ?a..?z if i.ord % 2 == 0 FileUtils.touch(File.join(@root, i)) else FileUtils.mkdir(File.join(@root, i)) end end dir = Dir.open(@root) cache = [] # 1.read and cache loop do pos = dir.tell break unless name = dir.read puts "[pos=#{pos}, name=#{name}]" cache << [pos, name] end # seek and compare for x,y in cache.sort_by {|z| z[0] % 3 } # shuffle dir.seek(x) ret = dir.read if y == ret puts "seek(#{x}) entry = #{ret}" else puts "Eek!! seek(#{x}) entry = #{ret} but, we expected #{y}" end end -------------------------------------------------------------------------------------------------------- example, my Ext4 filesystem show following result. % ruby-trunk fstest.rb [pos=0, name=.] [pos=89822176, name=d] [pos=194165296, name=j] [pos=271696806, name=n] [pos=608323928, name=e] [pos=652813187, name=i] [pos=661317888, name=q] [pos=680493873, name=t] [pos=764719427, name=r] [pos=773318942, name=p] [pos=820798994, name=y] [pos=846165918, name=k] [pos=875980547, name=v] [pos=915529337, name=f] [pos=1008597156, name=g] [pos=1236501901, name=o] [pos=1383945616, name=x] [pos=1419715873, name=m] [pos=1511546423, name=s] [pos=1514771115, name=b] [pos=1661695967, name=z] [pos=1666995949, name=w] [pos=1837064742, name=..] [pos=1860637837, name=c] [pos=1886395128, name=u] [pos=1899245332, name=h] [pos=2068400167, name=a] [pos=2074218752, name=l] seek(0) entry = . seek(1886395128) entry = u seek(1837064742) entry = .. seek(271696806) entry = n seek(1514771115) entry = b seek(846165918) entry = k seek(661317888) entry = q seek(680493873) entry = t seek(1008597156) entry = g seek(1236501901) entry = o seek(2068400167) entry = a seek(1899245332) entry = h seek(89822176) entry = d seek(1860637837) entry = c seek(194165296) entry = j seek(1666995949) entry = w seek(1383945616) entry = x seek(1419715873) entry = m seek(1511546423) entry = s seek(608323928) entry = e seek(1661695967) entry = z seek(773318942) entry = p seek(652813187) entry = i seek(915529337) entry = f seek(875980547) entry = v seek(764719427) entry = r seek(820798994) entry = y seek(2074218752) entry = l % strace -v ruby-trunk fstest.rb # Note: -v is very important. (snip) lseek(6, 2074218752, SEEK_SET) = 2074218752 getdents(6, {{d_ino=3671518, d_off=2147483647, d_reclen=24, d_name="l"}}, 32768) = 24 write(1, "seek(2074218752) entry = l", 26seek(2074218752) entry = l) = 26 write(1, "\n", 1 ) = 1 getrlimit(RLIMIT_STACK, {rlim_cur=8720000, rlim_max=RLIM_INFINITY}) = 0 rt_sigaction(SIGINT, {SIG_IGN, [], SA_RESTORER|SA_SIGINFO, 0x380be0eeb0}, {0x4b2fbc, [], SA_RESTORER|S\ A_SIGINFO, 0x380be0eeb0}, 8) = 0 rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER|SA_SIGINFO, 0x380be0eeb0}, {SIG_IGN, [], SA_RESTORER|SA\ _SIGINFO, 0x380be0eeb0}, 8) = 0 close(6) = 0 write(5, "!", 1) = 1 munmap(0x7f6fb20f4000, 1052672) = 0 exit_group(0) = ?