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

From: 門脇 修司 <kadowaki.shuji / jp.fujitsu.com>
Subject: [ruby-list:46813] Re: TkTable.rbで"[BUG] Segmentaion fauilt"発生
Date: Mon, 25 Jan 2010 17:16:48 +0900
Message-ID: <20100125171642.2AA0.DA7C2934 / jp.fujitsu.com>
> > そのため,tktable.rb 以外でも同じように SEGV する可能性がありますが,
> > それらについても応急処置として GC.disable/GC.enable で囲んでください.
> 
> わかりました。まずはこの手で回避し、もしも他の部分で同じことがおきたら
> 囲んでいきます。

ごめんなさい.
いくら応急処置にしてもインストール済みのものの変更が必須というのは
良い回避策提示とは言えませんでしたね.
ローカルの環境だけであればそれでもいいのでしょうけど,
作成したものを他所に提供する場合には困ります.

今回の回避策は monky patch で可能ですので,
他所でも動かすならその方がいいでしょう.
その場合は,アプリケーション上で require 'tk' をした後に
次の記述を加えてください.
--------------------------------------------------------
class << TkUtil::CallbackSubst
  alias _orig_setup_subst_table _setup_subst_table
  def _setup_subst_table(*args)
    st = GC.disable
    _orig_setup_subst_table(*args)
    GC.enable unless st
  end
end
--------------------------------------------------------
この程度の記述であれば,今後 bug fix が行なわれた後でも
特に問題を引き起こすことはないはずです.

> ruby_1_8に対して提供いただけるだけでとてもうれしいです。
> (ruby_1_9だけ、と言われても不思議でない時期ですよね?)

まだ暫くは ruby_1_8 への提供は終わらないと思います.
リリース版が出てなくても,
SVN サーバから ruby_1_8/ext/tk 以下を入手して置き換えて 
make, install すれば,新しいものを使えるはずです.
-- 
永井 秀利  (nagai / ai.kyutech.ac.jp)
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門