< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事(自分と同じ返事先を持つ)
N :次の記事
|<:スレッドの先頭
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
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]