From: Katsuyuki Komatsu Date: 1999-09-18T11:31:37+09:00 Subject: [ruby-list:16868] Re: irb-0.6.0 deadlock (Re: Ruby 1.4.2) 小松です。 In the message of [ruby-list:16861] Re: irb-0.6.0 deadlock (Re: Ruby 1.4.2) on 1999/9/18 09:56:50 matz@netlab.co.jp (Yukihiro Matsumoto) wrote: ||ハングの方は、eval.cはrb_thread_schedule()でEBADFを期待していて ||いるのに、win32/win32.cのmyselect()がWSAENOTSOCKを返しているため ||無限ループになっているようです。 | |なる。このメールにはeval.cに対するパッチと、win32.cに対する |パッチの両方が含まれていますが、これはwin32.cに対するものだ |けを取り込めば良いんですか? うーん、win32.cはまだ手を入れなきゃならいのですが、ハングする よりはいいか。win32.cの方だけ取り込んでください。 eval.cの方は、一時的な物です。 / / / ところで、[ruby-list:15168]のdeadlockの例で試した時の、エラー メッセージの出方の違いの原因はなんだろう? [Solaris 2.5.1] % cp /dev/null x % ruby -v ruby-list-15168.rb x ruby 1.4.2 (1999-09-17) [sparc-solaris2.5.1] ruby-list-15168.rb:18: warning: assignment in condition /usr/local/lib/ruby/1.4/thread.rb:151:deadlock 0x55368: 1:0 (main) ruby-list-15168.rb:10:in `pop': Thread: deadlock (fatal) from /usr/local/lib/ruby/1.4/thread.rb:146:in `loop' from /usr/local/lib/ruby/1.4/thread.rb:146:in `pop' from ruby-list-15168.rb:16 % [2000 Professional β3] C:\lang\ruby>copy nul x 1 個のファイルをコピーしました。 C:\lang\ruby>ruby -v ruby-list-15168.rb x ruby 1.4.2 (1999-09-17) [i386-mswin32] ruby-list-15168.rb:18: warning: assignment in condition ruby-list-15168.rb:10:deadlock 0x6c66e8: 1:1 C:/usr/local/lib/ruby/1.4/thread.rb:151:deadlock 0x6d5c70: 1:0 (main) C:/usr/local/lib/ruby/1.4/thread.rb:151:deadlock 0x6d5c70: 1:0 (main) ruby-list-15168.rb:10:in `(null)': Thread: deadlock (fatal) from ruby-list-15168.rb:10 C:\lang\ruby> #!/usr/local/bin/ruby # ruby ruby-list-15168.rb /etc/motd require "thread" q = Queue.new Thread.start { while gets q.push $_ end } while TRUE while line = q.pop print line end end -- 小松克行 / Katsuyuki Komatsu