From: "chris.frederick (Chris Frederick)" Date: 2013-07-02T10:06:08+09:00 Subject: [ruby-core:55750] [ruby-trunk - Bug #8594][Open] [BUG] rb_update_max_fd: invalid fd (4) given Issue #8594 has been reported by chris.frederick (Chris Frederick). ---------------------------------------- Bug #8594: [BUG] rb_update_max_fd: invalid fd (4) given https://bugs.ruby-lang.org/issues/8594 Author: chris.frederick (Chris Frederick) Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: ruby 2.0.0p195 (2013-05-14) [i386-mingw32] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN =begin Note that I expect EINVAL when running this code. Most of the time it is correctly handled by the rescue on line 108. Occasionally, however, Ruby crashes. I was originally experiencing this on 1.9.3p392; I upgraded to 2.0.0p195 but it did not resolve the problem. The triggering code: 100:# Try an file operation and print a single-character result to stdout. 101:# 102:# block - operation to perform. 103:# 104:# Returns nothing. 105:def try 106: yield 107: print '.' 108:rescue Errno::EINVAL 109: print 'i' 110: sleep 1 111:rescue Errno::ENOENT 112: print 'n' 113: sleep 1 114:rescue Errno::EACCES 115: print 'a' 116: sleep 1 117:rescue Errno::EBADF 118: print 'b' 119: sleep 1 120:rescue Errno::ENETDOWN 121: print 'd' 122: sleep 1 123:rescue Errno::ERANGE 124: print 'r' 125: sleep 1 126:end ... 157:50.times do 158: filebase = 'shakeshake-' + Time.new.to_i.to_s 159: print "\ncreate " ; 50.times { |i| try { File.write('%s_%d' % [filebase, i], 'a' * 100_000) } } 160: print "\nrename " ; 50.times { |i| try { File.rename('%s_%d' % [filebase, i], 'deleteme_%d' % [i]) } } 161: print "\ndelete " ; 50.times { |i| try { File.unlink('deleteme_%d' % [i]) } } 162: puts 163:end It dies like so: create tcp_drop_test.rb:159: [BUG] rb_update_max_fd: invalid fd (4) given. ruby 2.0.0p195 (2013-05-14) [i386-mingw32] -- Control frame information ----------------------------------------------- c:0009 p:---- s:0027 e:000026 CFUNC :write c:0008 p:0030 s:0022 e:000021 BLOCK tcp_drop_test.rb:159 c:0007 p:0006 s:0020 e:000019 METHOD tcp_drop_test.rb:106 c:0006 p:0007 s:0017 e:000016 BLOCK tcp_drop_test.rb:159 [FINISH] c:0005 p:---- s:0014 e:000013 CFUNC :times c:0004 p:0037 s:0011 e:000010 BLOCK tcp_drop_test.rb:159 [FINISH] c:0003 p:---- s:0008 e:000007 CFUNC :times c:0002 p:0282 s:0005 E:001558 EVAL tcp_drop_test.rb:157 [FINISH] c:0001 p:0000 s:0002 E:001e84 TOP [FINISH] tcp_drop_test.rb:157:in `
' tcp_drop_test.rb:157:in `times' tcp_drop_test.rb:159:in `block in
' tcp_drop_test.rb:159:in `times' tcp_drop_test.rb:159:in `block (2 levels) in
' tcp_drop_test.rb:106:in `try' tcp_drop_test.rb:159:in `block (3 levels) in
' tcp_drop_test.rb:159:in `write' -- C level backtrace information ------------------------------------------- C:\Windows\SysWOW64\ntdll.dll(ZwWaitForSingleObject+0x15) [0x773AF8B1] C:\Windows\syswow64\kernel32.dll(WaitForSingleObjectEx+0x43) [0x75B41194] C:\Windows\syswow64\kernel32.dll(WaitForSingleObject+0x12) [0x75B41148] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_vm_bugreport+0xa7) [0x668F69D7] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_name_err_mesg_new+0x69d) [0x667BE2AD] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_bug+0x2e) [0x667BF0AE] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_update_max_fd+0x52) [0x667EC952] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_update_max_fd+0xb9) [0x667EC9B9] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_io_fptr_finalize+0x3ae) [0x667F30AE] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_pipe+0xf1e) [0x667F864E] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_pipe+0xfb4) [0x667F86E4] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_error_arity+0x129) [0x668E1F89] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_f_send+0xbd8) [0x668F1968] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_vm_localjump_error+0x25ad) [0x668E69ED] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_vm_localjump_error+0x6ce4) [0x668EB124] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_yield+0x131) [0x668F3551] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_parser_dump_tree+0xeef) [0x6680F35F] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_error_arity+0x129) [0x668E1F89] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_f_send+0xbd8) [0x668F1968] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_vm_localjump_error+0x24fd) [0x668E693D] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_vm_localjump_error+0x6ce4) [0x668EB124] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_yield+0x131) [0x668F3551] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_parser_dump_tree+0xeef) [0x6680F35F] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_error_arity+0x129) [0x668E1F89] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_f_send+0xbd8) [0x668F1968] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_vm_localjump_error+0x24fd) [0x668E693D] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_vm_localjump_error+0x6ce4) [0x668EB124] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_iseq_eval_main+0x131) [0x668F39E1] C:\Ruby200\bin\msvcrt-ruby200.dll(rb_check_copyable+0x3721) [0x667C44E1] C:\Ruby200\bin\msvcrt-ruby200.dll(ruby_run_node+0x2d) [0x667C6A0D] [0x0040287F] [0x004013FA] C:\Windows\syswow64\kernel32.dll(BaseThreadInitThunk+0x12) [0x75B433AA] C:\Windows\SysWOW64\ntdll.dll(RtlInitializeExceptionChain+0x63) [0x773C9EF2] -- Other runtime information ----------------------------------------------- * Loaded script: tcp_drop_test.rb * Loaded features: 0 enumerator.so 1 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/enc/encdb.so 2 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/enc/iso_8859_1.so 3 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/enc/trans/transdb.so 4 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/rbconfig.rb 5 C:/Ruby200/lib/ruby/2.0.0/rubygems/compatibility.rb 6 C:/Ruby200/lib/ruby/2.0.0/rubygems/defaults.rb 7 C:/Ruby200/lib/ruby/2.0.0/rubygems/deprecate.rb 8 C:/Ruby200/lib/ruby/2.0.0/rubygems/errors.rb 9 C:/Ruby200/lib/ruby/2.0.0/rubygems/version.rb 10 C:/Ruby200/lib/ruby/2.0.0/rubygems/requirement.rb 11 C:/Ruby200/lib/ruby/2.0.0/rubygems/platform.rb 12 C:/Ruby200/lib/ruby/2.0.0/rubygems/specification.rb 13 C:/Ruby200/lib/ruby/2.0.0/rubygems/exceptions.rb 14 C:/Ruby200/lib/ruby/2.0.0/rubygems/defaults/operating_system.rb 15 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/enc/utf_16le.so 16 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/enc/trans/utf_16_32.so 17 C:/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_gem.rb 18 C:/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb 19 C:/Ruby200/lib/ruby/2.0.0/rubygems.rb 20 C:/Ruby200/lib/ruby/2.0.0/rubygems/path_support.rb 21 C:/Ruby200/lib/ruby/2.0.0/rubygems/dependency.rb 22 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/enc/trans/single_byte.so 23 C:/Ruby200/lib/ruby/2.0.0/thread.rb 24 C:/Ruby200/lib/ruby/2.0.0/monitor.rb 25 C:/Ruby200/lib/ruby/2.0.0/logger.rb 26 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/config.rb 27 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/errors.rb 28 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/loggable.rb 29 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/socket.so 30 C:/Ruby200/lib/ruby/2.0.0/socket.rb 31 C:/Ruby200/lib/ruby/2.0.0/timeout.rb 32 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/version.rb 33 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/ruby_compat.rb 34 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/digest.so 35 C:/Ruby200/lib/ruby/2.0.0/digest.rb 36 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/openssl.so 37 C:/Ruby200/lib/ruby/2.0.0/openssl/bn.rb 38 C:/Ruby200/lib/ruby/2.0.0/openssl/cipher.rb 39 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/stringio.so 40 C:/Ruby200/lib/ruby/2.0.0/openssl/config.rb 41 C:/Ruby200/lib/ruby/2.0.0/openssl/digest.rb 42 C:/Ruby200/lib/ruby/2.0.0/openssl/x509.rb 43 C:/Ruby200/lib/ruby/2.0.0/openssl/buffering.rb 44 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/fcntl.so 45 C:/Ruby200/lib/ruby/2.0.0/openssl/ssl.rb 46 C:/Ruby200/lib/ruby/2.0.0/openssl.rb 47 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/openssl.rb 48 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/buffer.rb 49 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/strscan.so 50 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/known_hosts.rb 51 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/ctr.rb 52 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/key_expander.rb 53 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/identity_cipher.rb 54 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/cipher_factory.rb 55 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/constants.rb 56 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/abstract.rb 57 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/md5.rb 58 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/md5_96.rb 59 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha1.rb 60 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha1_96.rb 61 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_256.rb 62 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_256_96.rb 63 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_512.rb 64 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_512_96.rb 65 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/ripemd160.rb 66 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac/none.rb 67 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/hmac.rb 68 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb 69 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb 70 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb 71 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb 72 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb 73 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb 74 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb 75 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/kex.rb 76 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/server_version.rb 77 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/algorithms.rb 78 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/buffered_io.rb 79 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/constants.rb 80 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/connection/constants.rb 81 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/packet.rb 82 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/zlib.so 83 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/state.rb 84 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/packet_stream.rb 85 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/verifiers/null.rb 86 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/verifiers/secure.rb 87 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/verifiers/strict.rb 88 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/verifiers/lenient.rb 89 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/transport/session.rb 90 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/prompt.rb 91 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/key_factory.rb 92 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/dl.so 93 C:/Ruby200/lib/ruby/2.0.0/i386-mingw32/fiddle.so 94 C:/Ruby200/lib/ruby/2.0.0/fiddle/function.rb 95 C:/Ruby200/lib/ruby/2.0.0/fiddle/closure.rb 96 C:/Ruby200/lib/ruby/2.0.0/fiddle.rb 97 C:/Ruby200/lib/ruby/2.0.0/dl.rb 98 C:/Ruby200/lib/ruby/2.0.0/dl/callback.rb 99 C:/Ruby200/lib/ruby/2.0.0/dl/stack.rb 100 C:/Ruby200/lib/ruby/2.0.0/dl/value.rb 101 C:/Ruby200/lib/ruby/2.0.0/dl/func.rb 102 C:/Ruby200/lib/ruby/2.0.0/dl/pack.rb 103 C:/Ruby200/lib/ruby/2.0.0/dl/struct.rb 104 C:/Ruby200/lib/ruby/2.0.0/dl/cparser.rb 105 C:/Ruby200/lib/ruby/2.0.0/dl/import.rb 106 C:/Ruby200/lib/ruby/2.0.0/dl/types.rb 107 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/pageant.rb 108 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/agent/socket.rb 109 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/agent.rb 110 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/key_manager.rb 111 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/methods/abstract.rb 112 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/methods/publickey.rb 113 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/methods/hostbased.rb 114 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/methods/password.rb 115 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/methods/keyboard_interactive.rb 116 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/authentication/session.rb 117 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/connection/term.rb 118 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/connection/channel.rb 119 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/service/forward.rb 120 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh/connection/session.rb 121 C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-ssh-2.6.7/lib/net/ssh.rb [NOTE] You may have encountered a bug in the Ruby interpreter or extension libraries. Bug reports are welcome. For details: http://www.ruby-lang.org/bugreport.html This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. =end -- http://bugs.ruby-lang.org/