From: Yusuke ENDOH Date: 2010-02-12T12:24:51+09:00 Subject: [ruby-dev:40408] Re: [Bug:trunk] TCPServer#gets gets stuck 遠藤です。 2010年2月12日9:39 Takahiro Kambe : >> EFAULT ってどのくらいあてになるんでしょうね。read 発行直後はちゃんと >> バッファがあったけど、ブロック中に別スレッドが free/realloc したなんて >> のも助けてくれるのかなあ。 > free(3)/realloc(3)したとしても、カーネルから見てプロセスに割り当てられ > たメモリに変わりがなければ、EFALUTにはならないでしょう。 > > これを期待する方が、無理な気がします。 まあ、そりゃそうですよね。OS が libc レベルの情報を知る訳ない。 後からログを読むひとのために問題を整理しておくと、 - EFAULT や SEGV が起きる問題は元からあった (1.9.1 でも観測され ている) - SEGV を起きにくくするチェックがあったが、タイミングをずらせば 簡単に抜けられるので、本質的には解決されていない - [ruby-dev:40317] のパッチはタイミング的にこのチェックの効果を 弱めるため、EFAULT が観測しやすくなった - 元の問題は STR_TMPLOCK を使えばたぶんちゃんと解決できる というわけで、[ruby-dev:40317] のパッチに問題があるわけではない と考えています。今のところ。 -- Yusuke ENDOH