In article <1109226932.312122.14623.nullmailer / x31.priv.netlab.jp>,
  Yukihiro Matsumoto <matz / ruby-lang.org> writes:

> |> ところで、青木さんの問題はread(2)がEINTRで中断されないのが原
> |> 因のように思えるのですが、なんでシグナルハンドラが呼び出され
> |> てもEINTRにならなくなったんですかね。
> |
> |それは SA_RESTART を設定しているからです。
>
> あ、そうか。これを止めると悪影響が出ますかね。大抵のところで
> はEINTRに対応していると思うのですが(SIGVTALRM対応があるので)。

いろいろと考えたのですが、これの悪影響が実際にはどの程度のものか確かめ
るために、1.9 で試しに消してみるというのはどうでしょう?

Index: signal.c
===================================================================
RCS file: /src/ruby/signal.c,v
retrieving revision 1.59
diff -u -p -r1.59 signal.c
--- signal.c	4 Mar 2005 06:47:41 -0000	1.59
+++ signal.c	4 Jun 2005 05:06:21 -0000
@@ -340,14 +340,6 @@ ruby_signal(signum, handler)
     sigact.sa_handler = handler;
     sigemptyset(&sigact.sa_mask);
     sigact.sa_flags = 0;
-#if defined(SA_RESTART)
-    /* All other signals but VTALRM shall restart restartable syscall
-       VTALRM will cause EINTR to syscall if interrupted.
-    */
-    if (signum != SIGVTALRM) {
-        sigact.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
-    }
-#endif
 #ifdef SA_NOCLDWAIT
     if (signum == SIGCHLD && handler == SIG_IGN)
 	sigact.sa_flags |= SA_NOCLDWAIT;
-- 
[田中 哲][たなか あきら][Tanaka Akira]