From: matz@... (Yukihiro Matsumoto) Date: 2003-05-22T02:29:14+09:00 Subject: [ruby-dev:20270] Re: pipe reopen まつもと ゆきひろです In message "[ruby-dev:20269] Re: pipe reopen" on 03/05/22, nobu.nakada@nifty.ne.jp writes: |ちょっと書き直してテストしていたら、rb_thread_fd_close()が書き |込みに対して効いていないのに気づきました。 | |$ ruby -e 'f = open("|sleep 100", "r+"); Thread.start{sleep 3;f.close}; loop{f.puts("x")}' |-e:1:in `write': Interrupt from -e:1:in `puts' | from -e:1 | from -e:1:in `loop' | from -e:1 | |まだrb_thread_schedule()でのEBADFの対処がまずいような気もします |が、こんなところで。 | |* IO#close,IO#reopen: 書き込み中のスレッドにも例外を上げる |* IO#reopen: 例外を上げるのは、元のdescriptorを閉じた後 |* IO#reopen: stdin,stdout,stderrの場合、FILE*を使い回す 全部を詳細に検討してはいませんが、よさそうに見えます。 コミットしてください。