[#28509] Rational — Tadayoshi Funaba <tadf@...>

ふなばです。

49 messages 2006/04/05
[#28510] Re: Rational — keiju@... (石塚圭樹) 2006/04/05

けいじゅ@いしつかです.

[#28512] Re: Rational — Tadayoshi Funaba <tadf@...> 2006/04/05

ふなばです。

[#28513] Re: Rational — Shin-ichiro HARA <sinara@...> 2006/04/05

原です。

[#28514] Re: Rational — keiju@... (石塚圭樹) 2006/04/05

けいじゅ@いしつかです.

[#28517] Re: Rational — Yukihiro Matsumoto <matz@...> 2006/04/06

まつもと ゆきひろです

[#28520] Re: Rational — keiju@... (石塚圭樹) 2006/04/06

けいじゅ@いしつかです.

[#28521] Re: Rational — Yukihiro Matsumoto <matz@...> 2006/04/06

まつもと ゆきひろです

[#28525] Re: Rational — keiju@... (石塚圭樹) 2006/04/06

けいじゅ@いしつかです.

[#28527] Re: Rational — Shin-ichiro HARA <sinara@...> 2006/04/06

原です。

[#28536] Re: Rational — Shin-ichiro HARA <sinara@...> 2006/04/10

原です。

[#28537] Re: Rational — keiju@... (石塚圭樹) 2006/04/10

けいじゅ@いしつかです.

[#28589] Float#div and Float#divmod [AGAIN] — Shin-ichiro HARA <sinara@...>

原です。

16 messages 2006/04/23

[ruby-dev:28504] Re: rb_gc_call_finalizer_at_exit() の実行中かどうかを知りたい

From: Hidetoshi NAGAI <nagai@...>
Date: 2006-04-04 02:07:15 UTC
List: ruby-dev #28504
永井@知能.九工大です.

From: Yukihiro Matsumoto <matz@ruby-lang.org>
Subject: [ruby-dev:28502] Re: rb_gc_call_finalizer_at_exit() の実行中かどうかを知りたい
Date: Tue, 4 Apr 2006 01:51:24 +0900
Message-ID: <1144083036.903808.16575.nullmailer@x31.priv.netlab.jp>
> |finalizer が呼ばれた際に,この rb_gc_call_finalizer_at_exit() の中から
> |呼ばれたものか否か,早い話が終了処理中に呼ばれたのかどうかを
> |正しく知る方法はありますでしょうか.
> |tcltklib での SEGV 回避のために欲しております.
> 
> 現時点ではないですねえ。終了処理でSEGVする直接の原因が分かれ
> ば(たとえばprot_tagがないとか)できることはあるかもしれません。

Tk インタープリタを解放する際にはいくつかの後始末が必要です.
TclTkIp オブジェクトは GC されてしまう可能性があり,
その際にきちんと Tk インタープリタの終了処理を行わなければ
アクセスできないままに生き続けるなどの困った状況になる恐れがあります.

ですので,TclTkIp オブジェクトの finalize 処理中に
Tk インタープリタの後始末をするようにしているのですが,
process の終了処理中には Ruby 側と Tk 側との絡みで
どうも不正な状況になってしまうようなのです.
タイミングとかも絡んでいるようですので断言はできませんが,
finalize 処理を Tk インタープリタの終了,解放だけにした場合には
process 終了時の SEGV が出なくなるように見えます.

#「ようなのです」,「ように見えます」といった曖昧な状況確認ですみません.

後始末処理のほとんどは,Tk インタープリタの終了後も
Ruby (Ruby/Tk) が無意味なエラーや SEGV を出すことなく
(不要なリソースをいつまでも保持し続けることなく)
処理継続できるようにするためのものですので,
process の終了処理中には実行しなくても実害はないと思われます.

Ruby 稼働中の解放の場合はきちんと後始末したいが,
process 終了処理中は Tk インタープリタを終了させる以外の
後始末処理を呼ばないようにしたいというわけで,
終了処理中かどうかをなんとか知る方法はないものかと考えた次第です.

あるいは,他に何かうまい方法またはこうすべきというような方法は
ありますでしょうか.
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai@ai.kyutech.ac.jp

In This Thread