From: Tanaka Akira Date: 2010-02-11T17:35:00+09:00 Subject: [ruby-dev:40392] Re: [Bug:trunk] TCPServer#gets gets stuck 2010年2月11日17:14 Yusuke ENDOH : > という挙動だったのですが、以下のようにすると、このチェックは > 抜けられることがあります (タイミングに依存しますが) 。 べつに落ちなければいいんですが。 テストがあるのは、以前、落ちたからのような気がします。 > やるとしたら、io_read の中の READ_CHECK の直後だけでチェックしても > だめで、buffer string に書こうとする直前で毎回チェックする必要が > あると思いますが、IO のパフォーマンスが下がりそうなのでそこまでする > 必要があるかどうかはわかりません。 EFAULT のケースだと、buffer string に書くのは read システムコールなので、 カーネルが EFAULT で済ましてくれるというのを期待することになりますね。 システムコールを発行する前にはメモリはちゃんとあって検査のしようがないし。 それでは済まない OS が無いことを期待する、ということになりますかね。 read がユーザレベルの関数で、バッファに書き込むとかされると落ちそうな気が。 いや、システムコールであっても、 メモリを解放した後また他の用途で確保したらアドレスが同じになっちゃって そこに read が書き込んで壊してしまうという可能性はどうだろう? STR_TMPLOCK が使えるかなぁ。 > 確かに、rubyspec の人たちも 1.8 とかで rubinius とかで固まってないの > か不思議ですよね。今度聞いときます。 確認してませんが、他にスレッドが無いのでは? まぁ、1.9 の場合に存在するスレッドは何かというのも確認してませんが。 -- [田中 哲][たなか あきら][Tanaka Akira]