[#21338] $SAFE=4 での autoload — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

21 messages 2003/09/04
[#21346] Re: $SAFE=4 での autoload — nobu.nakada@... 2003/09/04

なかだです。

[#21359] Re: $SAFE=4 での autoload — Hidetoshi NAGAI <nagai@...> 2003/09/05

永井@知能.九工大です.

[#21419] Makefile.inのlex.c — Kazuhiro NISHIYAMA <zn@...>

西山和広です。

15 messages 2003/09/28

[ruby-dev:21414] deferred finalizers

From: nobu.nakada@...
Date: 2003-09-26 09:46:01 UTC
List: ruby-dev #21414
なかだです。

bisonを使っている、つまり!ruby_parser_stack_on_heap()の場合、パー
ズ中にもオブジェクトが回収されることがありますが、finalizerが定
義されていても(次のGCまで)実行されません。

* gc.c (rb_gc_finalize_deferred): run deferred finalizers.

* ruby.c (load_file): run deferred finalizers for collected
  objects while compiling.

Index: gc.c
===================================================================
RCS file: /cvs/ruby/src/ruby/gc.c,v
retrieving revision 1.156
diff -u -2 -p -r1.156 gc.c
--- gc.c	22 Aug 2003 08:09:57 -0000	1.156
+++ gc.c	12 Sep 2003 07:24:50 -0000
@@ -1569,4 +1569,24 @@ run_final(obj)
 }
 
+static void
+finalize_list(p)
+    RVALUE **p;
+{
+    while (*p) {
+	RVALUE *tmp = p;
+	p = p->as.free.next;
+	run_final((VALUE)tmp);
+    }
+}
+
+void
+rb_gc_finalize_deferred()
+{
+    RVALUE *p = deferred_final_list;
+
+    deferred_final_list = 0;
+    if (p) finalize_list(p);
+}
+
 void
 rb_gc_call_finalizer_at_exit()
@@ -1577,12 +1597,5 @@ rb_gc_call_finalizer_at_exit()
     /* run finalizers */
     if (need_call_final) {
-	if (deferred_final_list) {
-	    p = deferred_final_list;
-	    while (p) {
-		RVALUE *tmp = p;
-		p = p->as.free.next;
-		run_final((VALUE)tmp);
-	    }
-	}
+	finalize_list(deferred_final_list);
 	for (i = 0; i < heaps_used; i++) {
 	    p = heaps[i]; pend = p + heaps_limits[i];
Index: ruby.c
===================================================================
RCS file: /cvs/ruby/src/ruby/ruby.c,v
retrieving revision 1.82
diff -u -2 -p -r1.82 ruby.c
--- ruby.c	30 Jul 2003 07:08:55 -0000	1.82
+++ ruby.c	15 Aug 2003 02:45:40 -0000
@@ -909,4 +909,7 @@ load_file(fname, script)
         rb_gc();
     }
+    else {
+	rb_gc_finalize_deferred();
+    }
 }
 


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

In This Thread

Prev Next