Bug #1634
closedcalled on terminated object
Description
=begin
ささだです.
ObjectSpace.each_object で inspect してまわっていると,"called on
terminated object" と言われてしまうのですが,とくに問題ないんでしたっけ?
$ ./ruby -ve 'ObjectSpace.each_object{|o| o.inspect}'
ruby 1.9.2dev (2009-06-14 trunk 23685) [i686-linux]
-e:1:in inspect': method
inspect' called on terminated object
(0x9789c14) (NotImplementedError)
from -e:1:in block in <main>' from -e:1:in
each_object'
from -e:1:in `'
ObjectSpace.each_object は klass の値をチェックしてるように思うんです
が,なんでこんなことになるんだろう.
--
// SASADA Koichi at atdot dot net
=end
Updated by matz (Yukihiro Matsumoto) almost 16 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:38613] [BUG: trunk] called on terminated object"
on Mon, 15 Jun 2009 06:18:27 +0900, SASADA Koichi [email protected] writes:
| ObjectSpace.each_object で inspect してまわっていると,"called on
|terminated object" と言われてしまうのですが,とくに問題ないんでしたっけ?
問題ないことはないですね。
| ObjectSpace.each_object は klass の値をチェックしてるように思うんです
|が,なんでこんなことになるんだろう.
調べてみたんですが、すでに参照されていない配列が生きていない
オブジェクトを指しているようです。each_objectの直前にGCを呼
ぶと発生しません。
これに対する考え方はたぶん二つあって
- each_objectはそういうものである
- each_objectのループ前に内部でGCを呼ぶ
のいずれかになると思います。気分的には後者かなあ。
=end
Updated by matz (Yukihiro Matsumoto) almost 16 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
Applied in changeset r23693.
=end