[#12763] NameError (Re: [ruby-list:29101] Re: nil.to_f) — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

24 messages 2001/04/04
[#12765] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — "K.Kosako" <kosako@...> 2001/04/04

Yukihiro Matsumotoさんの

[#12767] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — matz@... (Yukihiro Matsumoto) 2001/04/04

まつもと ゆきひろです

[#12787] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — "K.Kosako" <kosako@...> 2001/04/06

Yukihiro Matsumotoさんの

[#12789] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — matz@... (Yukihiro Matsumoto) 2001/04/06

まつもと ゆきひろです

[#12790] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — "K.Kosako" <kosako@...> 2001/04/06

Yukihiro Matsumotoさんの

[#12792] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — matz@... (Yukihiro Matsumoto) 2001/04/06

まつもと ゆきひろです

[#12838] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — "K.Kosako" <kosako@...> 2001/04/10

Yukihiro Matsumotoさんの

[#12795] recursive malloc / fork deadlock / thread deadlock — "Akinori MUSHA" <knu@...>

 添付のスクリプトで、いくつかのプラットフォームで問題が発生する

43 messages 2001/04/07
[#12799] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/07

まつもと ゆきひろです

[#12801] Re: recursive malloc / fork deadlock / thread deadlock — nobu.nakada@... 2001/04/08

なかだです。

[#12802] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/09

まつもと ゆきひろです

[#12822] Re: recursive malloc / fork deadlock / thread deadlock — nobu.nakada@... 2001/04/09

なかだです。

[#12827] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/09

まつもと ゆきひろです

[#12836] Re: recursive malloc / fork deadlock / thread deadlock — nobu.nakada@... 2001/04/10

なかだです。

[#12840] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/10

まつもと ゆきひろです

[#12852] Re: recursive malloc / fork deadlock / thread deadlock — nobu.nakada@... 2001/04/10

なかだです。

[#12854] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/10

まつもと ゆきひろです

[#12857] Re: recursive malloc / fork deadlock / thread deadlock — nobu.nakada@... 2001/04/10

なかだです。

[#12859] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/10

まつもと ゆきひろです

[#12862] Re: recursive malloc / fork deadlock / thread deadlock — GOTOU Yuuzou <gotoyuzo@...> 2001/04/10

ごとうゆうぞうです。

[#12866] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/10

まつもと ゆきひろです

[#12878] Re: recursive malloc / fork deadlock / thread deadlock — GOTOU Yuuzou <gotoyuzo@...> 2001/04/11

ごとうゆうぞうです。

[#12888] Re: recursive malloc / fork deadlock / thread deadlock — GOTOU Yuuzou <gotoyuzo@...> 2001/04/11

ごとうゆうぞうです。

[#12892] Re: recursive malloc / fork deadlock / thread deadlock — Takahiro Kambe <taca@...> 2001/04/12

完全に理解せずに書いています。

[#12895] Re: recursive malloc / fork deadlock / thread deadlock — Jun Adachi <adachi@...> 2001/04/12

安達@沖データと申します。

[#12898] Re: recursive malloc / fork deadlock / thread deadlock — GOTOU Yuuzou <gotoyuzo@...> 2001/04/12

ごとうゆうぞうです。

[#12830] 1.6.4 preview — "Akinori MUSHA" <knu@...>

 そろそろ FreeBSD 4.3-RELEASE 前の ports のフリーズが迫っている

23 messages 2001/04/09
[#12844] Re: 1.6.4 preview — matz@... (Yukihiro Matsumoto) 2001/04/10

まつもと ゆきひろです

[#12921] ObjectSpace.each_object(Symbol) — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

23 messages 2001/04/13
[#12923] Re: ObjectSpace.each_object(Symbol) — matz@... (Yukihiro Matsumoto) 2001/04/13

まつもと ゆきひろです

[#12928] Re: ObjectSpace.each_object(Symbol) — Hisayasu Nakao <h-nakao@...> 2001/04/13

中尾@富士通です。

[#12929] Re: ObjectSpace.each_object(Symbol) — matz@... (Yukihiro Matsumoto) 2001/04/13

まつもと ゆきひろです

[#12934] Re: ObjectSpace.each_object(Symbol) — keiju@... (石塚圭樹) 2001/04/13

けいじゅ@日本ラショナルソフトウェアです.

[#12941] Re: ObjectSpace.each_object(Symbol) — matz@... (Yukihiro Matsumoto) 2001/04/13

まつもと ゆきひろです

[ruby-dev:13021] Re: [rubyist:0523] Re:Re:finalizer での例外

From: Koji Arai <JCA02266@...>
Date: 2001-04-22 17:22:14 UTC
List: ruby-dev #13021
新井です。

rubyist から移動

In message "[rubyist:0523] Re:Re:finalizerでの例外"
  on 21 Apr 2001 16:10:10 +0900,
  Koji Arai <JCA02266@nifty.ne.jp> wrote:
> 新井です。

> > ですよね。finalizerとして与えたブロックから参照できるローカ
> > ル変数objに登録対象のオブジェクトが格納されているので、
> > finalizersからobjへの参照が発生し、結果としてobjがgcで回収さ
> > れなくなるんです。やはりfinalizersは使い方が難しいですね。
> 
> なるほど、言われてみれば単純な話でした(でもやっぱり難しい)。

一応、Proc が持つ frame が self を保持しているからファイナラ
イザが呼ばれないという認識も正しいようですね。

> ちゃんと調べてないのですがこの Bar でも終了時は、finalizer が
> 呼ばれるのはなんでだろう?

調べたところ、逆でした。GC されなくても終了時には必ずファイ
ナライザは呼ばれるのですね。

Baz で 終了時にファイナライザが呼ばれないように見えるのは

gc.c rb_gc_call_finalizer_at_exit()

  1249          for (i = 0; i < heaps_used; i++) {
  1250              p = heaps[i]; pend = p + HEAP_SLOTS;
  1251              while (p < pend) {
  1252                  if (FL_TEST(p, FL_FINALIZE)) {
  1253                      FL_UNSET(p, FL_FINALIZE);
  1254                      p->as.basic.klass = 0;
  1255                      run_final((VALUE)p);
  1256                  }
  1257                  p++;
  1258              }

の 1254行 で klass を消しているため

eva.c:rb_call()

  4450      if (!klass) {
  4451          rb_raise(rb_eNotImpError, "method call on terminated object");
  4452      }

で引っかかってるようです。これは意図したものなのなのでしょうか?

1.6.2 ではオッケーなので、

$ cvs diff -p -rv1_6_2 gc.c
| --- gc.c        2000/12/22 03:21:56     1.48
| +++ gc.c        2001/04/19 09:16:07     1.48.2.13
| @@ -1044,6 +1063,7 @@ os_live_obj()
| 		    case T_CLASS:
| 		      if (FL_TEST(p, FL_SINGLETON)) continue;
| 		    default:
| +                   if (!p->as.basic.klass) continue;
| 		      rb_yield((VALUE)p);
| 		      n++;
| 

このあたりの副作用なのかなと想像するのですが。はずしてたらご
めんなさい。



class Baz
  def initialize
    ObjectSpace.define_finalizer(self) {
      puts "baz"
    }
  end
end

class Bar
  def Bar.final(obj)
    ObjectSpace.define_finalizer(obj) {
      puts "bar"
    }
  end
  def initialize
    Bar.final(self)
  end
end

Bar.new
Baz.new
GC.start

# ruby -d で実行

# ruby 1.6.4 (2001-04-19) [i586-linux]
# ruby 1.7.0 (2001-04-02) [i586-linux]
# => Exception `NotImplementedError' at -:4 - method call on terminated object
#    bar
# ruby 1.6.2 (2000-12-25) [i586-linux]
# => baz
#    bar

--
新井康司 (Koji Arai)

In This Thread

Prev Next