[#14922] alias $gvar — Koji Arai <JCA02266@...>

新井です。

19 messages 2001/10/14

[#15006] Re: eval.c (rb_stack_check): prohibit recursive raising error — WATANABE Hirofumi <eban@...>

わたなべです。

13 messages 2001/10/26
[#15008] Re: eval.c (rb_stack_check): prohibit recursive raising error — Shugo Maeda <shugo@...> 2001/10/26

前田です。

[ruby-dev:15001] finalizer problem

From: keiju@... (Keiju ISHITSUKA)
Date: 2001-10-25 14:28:58 UTC
List: ruby-dev #15001
けいじゅ@日本ラショナルソフトウェアです.

プロセス終了時のfinalizerの呼び出しですが:

##---
rb_gc_call_finalizer_at_exit()
## 中略 
	for (i = 0; i < heaps_used; i++) {
	    p = heaps[i]; pend = p + heaps_limits[i];
	    while (p < pend) {
		if (FL_TEST(p, FL_FINALIZE)) {
		    FL_UNSET(p, FL_FINALIZE);
##-->		    p->as.basic.klass = 0;
		    run_final((VALUE)p);
		}
		p++;
	    }
	}
    }
## 後略
##---

「##-->」のところで, p->as.basic.klass = 0 としていますが, これって本当
に必要なものなのでしょうか?

というのも, プロセス終了時のここの部分のファイナライザの呼び出しは, オブ
ジェクトテーブル(ていっていいのかな?)にエントリされている順番にファイナ
ライズしている(つまりGCしていることになっている)ので, 後で呼ばれたファイ
ナライザが、先にファイナライズされたオブジェクトのメソッドを呼び出すとエ
ラーになってしまいます. 

p->as.basic.klass = 0 にしなくてもプロセスは正常に終了すると思うのですが
どうなんでしょう?

__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread

Prev Next