From: Masao M. <mu...@hi...> - 2006-06-17 09:29:35
|
むとうです。 On Thu, 15 Jun 2006 01:26:12 +0900 Masao Mutoh <mu...@hi...> wrote: > むとうです。 > > On Wed, 14 Jun 2006 17:03:03 +0900 > "Kouhei Sutou" <ko...@co...> wrote: > > > 須藤です. > > > > 06/06/14 に 酒井政裕 Masahiro Sakai<sa...@to...> さんは書きました: > > > > > このコードについては、Gtk.timeout_add で登録したブロックを呼び出す > > > gtk_m_functionがrb_protectを使っていないのがまずいので、 > > > それを修正すれば良いと思います。 > > > > はい,それはわかります. > > ただ,どう修正すればよいのかがわかりません.単にrb_protect() > > して例外をあげないようにすると,↓の例でも例外があがらないよ > > うになり,今までの動作とことなることになります. > > これなのですが、まぁ、今までの動作は置いておいて、 > さかいさんのおっしゃるとおり、rb_protect()していない > gtk_m_functionのバグで、そちらを修正した方が良さそうです。 なおしました。 まず、Ruby/GLib2にG_PROTECT_CALLBACKというマクロを追加しました。 これで囲んだ関数内で例外が発生するとエラーメッセージを出して 異常終了します。 ここで、異常終了(exit(EXIT_FAILURE);)をさせてしまうのが rclosure_marshal_do()の今までの実装と異なります。 rclosure_marshal_do()もこちらのマクロを使うように変更しました ので、今後は「メインループ内に登録したブロック内でエラーが発生した場合は エラーメッセージを表示した上で異常終了する」 ということになります。 もしかしたら、Gtk.timeout_add等で例外が上がっても続いて欲しい・・・ というニーズがあるかと思ったのですが、やっぱりそこは、アプリ作者の 人が自分で例外を捕捉すべきと考え、exitしちゃうことにしました。 問題がありましたら言ってください。 -- .:% Masao Mutoh<mu...@hi...> |