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

From: nobu@...
Date: 2005-06-10 15:43:30 UTC
List: ruby-dev #26329
なかだです。

At Fri, 10 Jun 2005 14:54:47 +0900,
Tanaka Akira wrote in [ruby-dev:26323]:
> > うーん、backtraceは取れますか。
> 
> とりあえず 5つとれました。

スレッドリストから外されたrb_thread_tがGCされてしまっているのか
も知れません。

> あと、とりあえず無限ループの検査を書いてみました。無限ループより core
> dump のほうがいいひと (って私以外にいるかどうかは怪しいところですが...)
> はどうぞ。

こういうのでテストしてました。手抜きですが。

+    n = 0;
+    FOREACH_THREAD(th) {
+	if (++n > 100000) rb_bug("thread list is too big or currupted");
+    }
+    END_FOREACH(th);


Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.787
diff -U2 -p -u -r1.787 eval.c
--- eval.c	9 Jun 2005 11:17:52 -0000	1.787
+++ eval.c	10 Jun 2005 06:59:29 -0000
@@ -10647,4 +10647,5 @@ rb_thread_schedule()
     rb_thread_t th;
     rb_thread_t curr;
+    rb_thread_t orig_thread;
     int found = 0;
 
@@ -10670,8 +10671,10 @@ rb_thread_schedule()
     next = 0;
     curr = curr_thread;		/* starting thread */
+    orig_thread = curr;
 
     while (curr->status == THREAD_KILLED) {
 	curr = curr->prev;
     }
+    curr_thread = curr;
 
     rb_fd_init(&readfds);
@@ -10884,10 +10887,10 @@ rb_thread_schedule()
     }
     next->wait_for = 0;
-    if (next->status == THREAD_RUNNABLE && next == curr_thread) {
+    if (next->status == THREAD_RUNNABLE && next == orig_thread) {
 	return;
     }
 
     /* context switch */
-    if (curr == curr_thread) {
+    if (curr == orig_thread) {
 	if (THREAD_SAVE_CONTEXT(curr)) {
 	    return;


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread