かんだ@楓街です。

ttate / jaist.ac.jpさんの書かれた、
	「[ruby-ext:00030] Re: PTY and iterator」
からの引用です。

> 立石です。
> 
> From: "D.Kanda" <MAP2303 / mapletown.net>
> MAP2303> > あ伊藤です.拡張モジュールについて悩んでいることがあるので,
> MAP2303> 
> MAP2303> >   PTY.spawn(cmd) do |r_file, w_file|
> MAP2303> >     処理
> MAP2303> >   end
> MAP2303> > 
> MAP2303> > だとプロセス巨大化が起こることが判明しました.
> MAP2303> 
> MAP2303>   end の前に r_file = nil とか入れてみるとどうでしょう?
> MAP2303>   イテレータ内だったか覚えていませんが、似たような症状がこれでめでたく
> MAP2303> 解放されたことがあります。
> 
> 結局原因はなんだったのでしょう?(@_@;
> かんださんの返答から推測するとローカルな
> 変数が解放されてないということなのでしょう
> けど、、、、、
> nilを代入することでGCの対象にしてるんですよね?

  gc.c 追っかけてはみたのですが、僕の力じゃ分かりませんでした。

  秋頃に rubydiscのメモリ喰う問題を追跡していたとき、ちょうど「ちゃんと
nil を代入してなんとか」とかいうメールが流れたので、試しにやってみたら解
放されるようになったのでそのままです。今ちょっと件のメールを探してみたけ
れど見つからないなぁ…GCからみの話だったかも記憶にない。