From: Tanaka Akira Date: 2005-06-04T14:08:43+09:00 Subject: [ruby-dev:26276] Re: I/O operation differs signal handler In article <1109226932.312122.14623.nullmailer@x31.priv.netlab.jp>, Yukihiro Matsumoto 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]