[#15067] rb_eval_string — OJ <oj@...7.com>

OJです。

39 messages 2001/11/08
[#15068] Re: rb_eval_string — nobu.nakada@... 2001/11/08

なかだです。

[#15069] Re: rb_eval_string — OJ <oj@...7.com> 2001/11/08

OJです。

[#15071] Re: rb_eval_string — nobu.nakada@... 2001/11/09

なかだです。

[#15077] Re: rb_eval_string — OJ <oj@...7.com> 2001/11/09

OJです。

[#15078] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/09

わたなべです。

[#15083] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/09

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

[#15088] Re: rb_eval_string — nobu.nakada@... 2001/11/09

なかだです。

[#15089] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/09

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

[#15092] Re: rb_eval_string — nobu.nakada@... 2001/11/09

なかだです。

[#15096] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/09

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

[#15109] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15112] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

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

[#15114] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15115] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

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

[#15119] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15121] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

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

[#15124] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15126] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

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

[#15174] strange behavior about PTY.spawn — akira yamada / やまだあきら <akira@...>

18 messages 2001/11/15
[#15176] Re: strange behavior about PTY.spawn — matz@... (Yukihiro Matsumoto) 2001/11/15

まつもと ゆきひろです

[#15251] Re: [ruby-ext:01999] Re: syslog module is becoming ready — "Akinori MUSHA" <knu@...>

 というわけで 1.7 に syslog モジュールを入れました。

43 messages 2001/11/26

[#15270] ruby on NetBSD — "U.Nakamura" <usa@...>

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

25 messages 2001/11/28
[#15271] Re: ruby on NetBSD — Takahiro Kambe <taca@...> 2001/11/28

In message <20011128181510.3D11.USA@osb.att.ne.jp>

[#15272] Re: ruby on NetBSD — "U.Nakamura" <usa@...> 2001/11/28

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

[#15278] Re: ruby on NetBSD — Takahiro Kambe <taca@...> 2001/11/28

In message <20011128182726.3D14.USA@osb.att.ne.jp>

[#15296] Re: ruby on NetBSD — "U.Nakamura" <usa@...> 2001/11/29

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

[#15298] time.rb — Tanaka Akira <akr@...17n.org>

というわけで、timex.rb 改め time.rb が rough に入ったのでご意見募集です。

27 messages 2001/11/29

[ruby-dev:15242] Re: gc.c (gc_mark_rest): declare work area as static

From: sheepman <sheepman@...>
Date: 2001-11-22 11:27:50 UTC
List: ruby-dev #15242
On Thu, 22 Nov 2001 16:21:17 +0900
"K.Kosako" <kosako@sofnec.co.jp> wrote:

> 現在のGCのアルゴリズム(matz-sheepman)を少し変更しようと思って、
> テスト用スクリプトを書いているうちに、GCが永遠に戻ってこない
> 現象を発見しました。(最新版です)
> 
> gc_mark_rest()から再帰的に呼ぶ事のできるrb_gc_mark()の深さが、
> この現象が起こる場合、一段階だけになっているのが原因で永久に
> 終わらないようです。
>

再現しました。

原因は、実際にマークする前にスタックの長さをチェックしていたからだと
思います。rb_gc_mark の制御の流れを整理したら直りました。

もとのコードでは、

マークしていないオブジェクトを発見→
マークする前にスタックの長さをチェック→
溢れそうなので何もせずリターン→
マークしていないオブジェクトを発見....
(以下永遠にくり返し)

となる可能性があったんですね。気づきませんでした。

# return の多用はプログラムの流れを分かり難くしますね。反省。

Index: gc.c
===================================================================
RCS file: /src/ruby/gc.c,v
retrieving revision 1.79
diff -u -r1.79 gc.c
--- gc.c	2001/11/21 15:41:26	1.79
+++ gc.c	2001/11/22 11:15:28
@@ -464,7 +464,7 @@
     
     while(p != tmp_arry){
 	p--;
-	rb_gc_mark(*p);
+	rb_gc_mark_children(*p);
     }
 }
 
@@ -571,28 +571,25 @@
     if (obj->as.basic.flags == 0) return;       /* free cell */
     if (obj->as.basic.flags & FL_MARK) return;  /* already marked */ 
 
-    if (!mark_stack_overflow){
+    obj->as.basic.flags |= FL_MARK;
+
+     if (mark_stack_overflow){
+	mark_all &= 0;
+     }else{
 	int ret;
 	CHECK_STACK(ret);
 	if (ret) {
 	    if (mark_stack_ptr - mark_stack < MARK_STACK_MAX) {
 		*mark_stack_ptr = ptr;
-		mark_stack_ptr++;
-		return;
+		mark_stack_ptr++;		
 	    }else{
 		mark_stack_overflow = 1;
 	    }
+	}else{
+	    rb_gc_mark_children(ptr);
 	}
-    }
-
-    obj->as.basic.flags |= FL_MARK;
-
-    if (mark_stack_overflow){
-	mark_all &= 0;
-	return;
-    }else{
-	rb_gc_mark_children(ptr);
     }
+    
 }
 
 void
-- 
sheepman / TAMURA Takashi
sheepman@tcn.zaq.ne.jp http://www.tcn.zaq.ne.jp/sheepman/
Key fingerprint = 4E13 FE38 CD73 48D3 38AE  00EE 9E28 F98B D569 848E

In This Thread