In article <1109226932.312122.14623.nullmailer / x31.priv.netlab.jp>,
  Yukihiro Matsumoto <matz / ruby-lang.org> 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]