[#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:26343] Re: rb_gc_mark_threads spin

From: Tanaka Akira <akr@...17n.org>
Date: 2005-06-12 13:53:42 UTC
List: ruby-dev #26343
In article <1118583170.298416.26464.nullmailer@x31.priv.netlab.jp>,
  Yukihiro Matsumoto <matz@ruby-lang.org> writes:

> curr_threadが THREAD_KILLED になっている状態(そんなに長くな
> いはず)でたまたま割り込みがかかってしまった、という話なんで
> したっけ。それともなんらかの事情でcurr_threadがTHREAD_KILLED
> のままになる時期がかなり長い時間存在するってことですか。
> 
> 後者なら、それなりの対応を考えないといけませんが。

あるスレッドが終了した後、他のスレッドが IO 待ちだと、次に動作するスレッ
ドが決めるのに select する必要がありますが、その select がブロックする
と任意の長い時間存在することになります。[ruby-dev:26128] はそういうケー
スです。つまり、少なくとも [ruby-dev:26128] が再現する環境では後者です。

そして、select には fd_set が必要で、rb_fd_init 導入以降そこで GC が起
こることがあります。そのときに curr_thread が環状リストから外れている
ので rb_gc_mark_threads が無限ループになるというのが今回の原因です。

> これでコミットしてください。

えぇと、後からいろいろと思うところが出てきたのですが、まず
        rb_thread_main_jump(ruby_errinfo, RESTORE_EXIT);
というのをてきとうに他からコピーしてきてしまったんですが、ruby_errinfo
を設定した覚えがないので参照するのはよろしくないように思います。

また、そもそも signal は main thread に届くという仕様なので、届いた瞬
間に偶然動いていたスレッドを遡って終了させてから main thread に伝播す
るのではなく、直接 main thread に送るほうが適切だと思います。

さらに、trap で EXIT にすると任意のタイミングで終了させられるようなの
ですが、これは危険ではないでしょうか。まぁ、これは安全な signal
handling とからむので、そう単純な話ではありませんが。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread