[#26266] pragma on ripper — nobuyoshi nakada <nobuyoshi.nakada@...>

なかだです。

15 messages 2005/06/02

[#26312] rb_gc_mark_threads spin — Tanaka Akira <akr@...17n.org>

最近、とあるプログラム(五月雨)が、無限ループに陥ることが何回かありました。

32 messages 2005/06/09
[#26323] Re: rb_gc_mark_threads spin — Tanaka Akira <akr@...17n.org> 2005/06/10

In article <TYOMLEM04Rqf69aZbLA0000002d@tyomlvem02.e2k.ad.ge.com>,

[#26329] Re: rb_gc_mark_threads spin — nobu@... 2005/06/10

なかだです。

[#26331] Re: rb_gc_mark_threads spin — Tanaka Akira <akr@...17n.org> 2005/06/11

In article <200506101543.j5AFhToG009328@sharui.nakada.niregi.kanuma.tochigi.jp>,

[#26333] Re: rb_gc_mark_threads spin — Tanaka Akira <akr@...17n.org> 2005/06/11

In article <8764wlil9l.fsf@m17n.org>,

[#26334] Re: rb_gc_mark_threads spin — nobu@... 2005/06/11

なかだです。

[#26337] Re: rb_gc_mark_threads spin — Tanaka Akira <akr@...17n.org> 2005/06/11

In article <200506111335.j5BDZkoG019423@sharui.nakada.niregi.kanuma.tochigi.jp>,

[#26405] WEBrick DoS vulnerability — Tanaka Akira <akr@...17n.org>

NetBSD 2.0 で WEBrick を使って HTTP サーバを動かした場合、クライアント

24 messages 2005/06/29
[#26477] Re: WEBrick DoS vulnerability — GOTOU Yuuzou <gotoyuzo@...> 2005/07/08

ごとうゆうぞうです。

[#26480] Re: WEBrick DoS vulnerability — Tanaka Akira <akr@...17n.org> 2005/07/08

In article <20050708.175802.957830318.gotoyuzo@sawara.does.notwork.org>,

[#26481] Re: WEBrick DoS vulnerability — GOTOU Yuuzou <gotoyuzo@...> 2005/07/08

In message <87fyupzgcq.fsf@m17n.org>,

[#26421] Subversion — Shugo Maeda <shugo@...>

前田です。

24 messages 2005/06/30
[#26422] Re: Subversion — Yukihiro Matsumoto <matz@...> 2005/06/30

まつもと ゆきひろです

[#26423] Re: Subversion — "U.Nakamura" <usa@...> 2005/06/30

こんにちは、なかむら(う)です。

[ruby-dev:26354] Re: rb_gc_mark_threads spin

From: Tanaka Akira <akr@...17n.org>
Date: 2005-06-14 09:42:21 UTC
List: ruby-dev #26354
In article <1118594159.711347.11737.nullmailer@x31.priv.netlab.jp>,
  Yukihiro Matsumoto <matz@ruby-lang.org> writes:

> 結局criticalなタイミングで割り込みが入ってしまうとだめだから
> ということですね。確かにそうですね。割り込みはmain threadで
> 発生すべきという一貫性と安全性は関係ありませんね。

試しに次のスクリプトで ^C で SIGINT を送りつづ
けると SEGV になります。

% ./ruby -e '
trap(:INT, "EXIT")
t1 = Thread.new { loop {} }
loop { begin loop {}; rescue SystemExit; p 0 end }
'
0
0
0
0
0
0
0
0
0
0
0
0
-e:4: [BUG] Segmentation fault
ruby 1.9.0 (2005-06-13) [i686-linux]

[ruby-dev:26346] のは最初の SIGINT で終了するようになったので再現させ
にくくなっちゃいましたが、それでも何回か試すと SEGV することがあります
ね。

> sigexitも安全なタイミングで実行した方が良いのでしょうか。そ
> れとも「終了することが目的」だから終われば良いとみなすべきで
> しょうか。ちょっと悩ましいですね。

さらに考えたのですが、終了するだけでよくて終了処理がいらないのであれば、
SIG_DFL にするという手段が存在することに気がつきました。
(SIGINT, SIGTERM などの default action がプロセスの終了である signal
についての話ですが。)

つまり、EXIT は終了処理が欲しい時に使うのであって、SEGV だとその要望を
満たせない気がします。

やはり、安全なタイミングに遅延したほうがいいように思います。

EXIT の存在意義が終了という意図を表現するのに重要であるとか、
SIGCHLD などの default action がプロセス終了でない signal で終了したい
とかいう理由を重視するなら別ですが。

ただ、完全に安全でなければならないかというとそうは思っていなくて、終了
時に行っていた I/O の結果が得られないというくらいなら許容範囲という気
がします。なので、TRAP_BEG, TRAP_END 間なら直接 main thread で
SystemExit を発生するというあたりが落としどころでしょうか。

まぁ、TRAP_END まで遅延したとしても、(SA_RESTART を抜いたので)
TRAP_BEG から I/O で kernel に入るまでの間に signal がこなければ問題あ
りませんが。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread