From: Tanaka Akira Date: 2005-02-24T15:51:28+09:00 Subject: [ruby-dev:25763] Re: I/O operation differs signal handler In article <1109226932.312122.14623.nullmailer@x31.priv.netlab.jp>, Yukihiro Matsumoto writes: > あ、そうか。これを止めると悪影響が出ますかね。大抵のところで > はEINTRに対応していると思うのですが(SIGVTALRM対応があるので)。 [ruby-dev:25758] に書いたように、「SA_RESTART を一時的に抜くのはありか もしれませんが毎回やるのはオーバーヘッドが気になり、さりとてずっとそう しておくのは他のライブラリの迷惑になります」という認識です。 Ruby 自身が EINTR を処理できるときにはいいのですが、他のライブラリ内で の扱いが問題になります。 たとえば、とある stdio というライブラリにはそういう問題があって、1.9 では (あまり) 使ってないんで発症させられないのですが、1.8 では次のよう に発症させられます。 % ./ruby -ve ' r, w = IO.pipe w.sync = false n = 1000 fork { w.close loop { sleep 0.1 s = r.read(n); p [s.length, s] sleep 0.1 s = r.read(n); p [s.length, s] } } Thread.new { loop {} } fork { loop { Process.kill("VTALRM", Process.ppid) } } r.close loop { w.write("a" * n) w.write("b" * n) } ' ruby 1.8.2 (2005-02-23) [i686-linux] ... [1000, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! aaaaaaaaaaaaaaaaaaa"] このスクリプトは a を 1000byte, b を 1000byte と繰り返しパイプに送り込 み、受け取るものですが、しばらく動かしていると上のように a と b の境界 がずれていきます。 まぁ、1.9 では stdio は使っていないから問題ない、という主張は可能でしょ うが、stdio でさえ対応してないんだから他のライブラリも怪しいんじゃない かと考えるのが順当じゃないですかね。 -- [田中 哲][たなか あきら][Tanaka Akira]