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

From: Tanaka Akira <akr@...17n.org>
Date: 2005-06-09 05:41:49 UTC
List: ruby-dev #26312
最近、とあるプログラム(五月雨)が、無限ループに陥ることが何回かありました。

gdb で attach して調べると、どうも rb_gc_mark_threads 内で無限ループに
なっているようです。

| (gdb) attach 2375
...
| gc_mark (ptr=1079903736, lev=0) at ruby.h:683
| 683         if (SPECIAL_CONST_P(obj)) return Qtrue;
| (gdb) bt
| #0  gc_mark (ptr=1079903736, lev=0) at ruby.h:683
| #1  0x08058bd0 in rb_gc_mark_threads () at eval.c:10188
| #2  0x080731f5 in garbage_collect () at gc.c:1373
| #3  0x08073a6c in ruby_xmalloc (size=128) at gc.c:122
| #4  0x08058531 in rb_fd_init (fds=0xbffff6bc) at eval.c:9784
| #5  0x0805bbaf in rb_thread_schedule () at eval.c:10644
| #6  0x0805c8cc in rb_thread_terminated (th=0x89b7e70, state=0, status=Variable "status" is not available.
| ) at eval.c:11988
| #7  0x0805ba6f in rb_thread_start_1 () at eval.c:12038
| #8  0x0806b28d in ruby_exec_internal () at eval.c:1540
| #9  0x0806b2a6 in ruby_exec () at eval.c:1553
| #10 0x0806b2d0 in ruby_run () at eval.c:1570
| #11 0x08053f38 in main (argc=1079903736, argv=0x405e05f8, envp=0xbffff9e8) at main.c:38

rb_thread_terminated -> rb_thread_schedule -> rb_fd_init ときたところ
で GC が起こっている。

| (gdb) finish
| Run till exit from #0  gc_mark (ptr=1079903736, lev=0) at ruby.h:683
| rb_gc_mark_threads () at eval.c:10189
| 10189       } END_FOREACH(th);
| (gdb) finish
| Run till exit from #0  rb_gc_mark_threads () at eval.c:10189
| 
| Program received signal SIGINT, Interrupt.
| gc_mark (ptr=1075660516, lev=0) at gc.c:709
| 709         if (obj->as.basic.flags == 0) return;       /* free cell */

rb_gc_mark_threads を finish しようとすると終わらないのでそこで無限ルー
プになっている。

| (gdb) finish
| Run till exit from #0  gc_mark (ptr=1075660516, lev=0) at gc.c:709
| rb_gc_mark_threads () at eval.c:10189
| 10189       } END_FOREACH(th);
| (gdb) bt
| #0  rb_gc_mark_threads () at eval.c:10189
| #1  0x080731f5 in garbage_collect () at gc.c:1373
| #2  0x08073a6c in ruby_xmalloc (size=128) at gc.c:122
| #3  0x08058531 in rb_fd_init (fds=0xbffff6bc) at eval.c:9784
| #4  0x0805bbaf in rb_thread_schedule () at eval.c:10644
| #5  0x0805c8cc in rb_thread_terminated (th=0x89b7e70, state=0, status=Variable "status" is not available.
| ) at eval.c:11988
| #6  0x0805ba6f in rb_thread_start_1 () at eval.c:12038
| #7  0x0806b28d in ruby_exec_internal () at eval.c:1540
| #8  0x0806b2a6 in ruby_exec () at eval.c:1553
| #9  0x0806b2d0 in ruby_run () at eval.c:1570
| #10 0x08053f38 in main (argc=50, argv=0x32, envp=0xbffff9e8) at main.c:38
| (gdb) p th
| $1 = 0x8129268
| (gdb) p th->next
| $2 = (struct thread *) 0x89c03c0
| (gdb) p th->next->next
| $3 = (struct thread *) 0x8129268
| (gdb) p th->next->next->next
| $4 = (struct thread *) 0x89c03c0
| (gdb) p th->prev
| $5 = (struct thread *) 0x89c03c0
| (gdb) p th->prev->prev
| $6 = (struct thread *) 0x8129268
| (gdb) p th->prev->prev->prev
| $7 = (struct thread *) 0x89c03c0

th が circular list からはずれている。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next