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

# まとめて返信させていただきますが,ご容赦ください.

From: Ryutaro Amano <wn9r-amn / asahi-net.or.jp>
Subject: [ruby-list:45198] Re: ソース:インストール:MacOSX10.3.9
Date: Sun, 6 Jul 2008 08:08:15 +0900
Message-ID: <07A24EA9-8B6C-4AD5-91DB-CDB47D5E48ED / asahi-net.or.jp>
> module TkCore; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
> require 'tk'
> 
> で、エラーが出ないのを確認しました。
> うちのPowerPCMac + 10.5.4 において
> AquaTclTk-8.5.2および8.5.2をソースからインストールの環 
> 境で、どちらも上記のやり方でエラーなしでした。

確認をありがとうございます.

> ---------------------------------------------------------
> require 'tcltklib'
> ip = TclTkIp.new
> ip._eval('after 1 {destroy .}')
> TclTkLib.mainloop
> ip.delete
> ip = nil  # for GC
> require 'tk'
> ---------------------------------------------------------
> 
> は、以下のようになります。
> 
> :10: [BUG] Segmentation fault
> ruby 1.9.0 (2008-06-20 revision 17482) [powerpc-darwin9.3.0]


From: wei <weimayamiew / gmail.com>
Subject: [ruby-list:45196] Re: ソース:インストール:MacOSX10.3.9
Date: Sat, 5 Jul 2008 23:43:15 +0900
Message-ID: <CA7038B5-80A1-46E9-B456-2EEE17089B7E / gmail.com>
> 試した所、一瞬Windowが出て
> 
>    Tcl_Release couldn't find reference for 0x107c10
>    Abort
> 
> と出てすぐに終了しました。

あ゛...
すみません.別のバグを掘り出したみたいですね.(^_^;
多分,インタープリタの破棄時に不必要にインタープリタの Tcl_Release を
してしまっているということだと思いますので,修正します.

とりあえず,テストコードから
---------------------------------------------------------
ip.delete
ip = nil  # for GC
---------------------------------------------------------
の2行を取り除いて試してみるとどうなるでしょうか?

> ちなみに10.5.4上で、ruby-1.9.0-2を以下のオプショ 
> ンでインストールすると
> 
> ./configure --enable-shared --enable-pthread
> 普通に require 'tk' で問題ありません。この場合は、デ 
> フォルトでインストールされている8.4.7が呼ばれています。

Tcl/Tk のソースを見てみると,問題となっている個所は
8.4.9 と 8.4.10 の間で変更されています.
動くか動かないかの差はそれが理由だったようですね.
8.4.10 以降では,event loop は main thread でしか
動かせないということになるようです.

とはいえ,8.4.7 では動いているということは,
きっと何かの方法自体は存在するのでしょうね.
その方法が,TkAqua 側で何とかしてもらうしかどうしようもないのか,
あるいは Ruby/Tk 側で何とかすることが可能なものなのかは
恥ずかしながらまだ分からないのですが...
-- 
永井 秀利  (nagai / ai.kyutech.ac.jp)
九州工業大学 大学院情報工学研究院 知能情報工学研究系