From: Araki K. <ara...@us...> - 2002-04-27 03:59:24
|
荒木です:-) Subject: [Mlterm-dev-ja] dlopen/dlclose bug with multiple terms in one proc From: Seiichi SATO <ss...@sh...> Message-ID: <20020425100638.GA1552%ss...@sh...> Date: Thu, 25 Apr 2002 19:06:38 +0900 > ml_sb_view_factory.c では、直前に dlopen() で load したライブラリのハンドルを > prev_shlib_handle に保存しています。 スクロールバー切替えにより不要になった > ライブラリを unload する時、この prev_shlib_handle を dlclose() の引数として > 使っています。 > > 「単一プロセス-単一端末」であれば大丈夫ですが、「単一プロセス-複数端末」の場合 > は prev_shlib_handle に別の端末で使用中のライブラリのハンドルが 保存されている > 場合もあるかと思います。 > > 例えば.. > > 1. "mlterm -S simple" で端末Aを開く > 2. Ctrl-F1で 端末B,Cを開く > 3. Bのスクロールバーを sample に変更 > (prev_shlib_handle に libsample.so のハンドルが保存される) > 4. Cのスクロールバーを sample2 に変更 > (libsample.so を unload) > ~~~~~~~~~~~~~~~~~~~~~~~--> B の スクロールバー > > という感じです。 全くもって仰せのとおりです _o_ > 修正案として > > 「prev_shlib_handle 変数を ml_sb_view_factory.c の中ではなく、ml_sb_view_t や > ml_scrollbar_t 構造体のメンバとする」 > > というのはいかがでしょうか? ml_sb_view_factory.c の中で、各ハンドルごとの参照数を管理することで、回避する ことにしました。 # ml_sb_view_t や、ml_scrollbar_t の中に prev_shlib_handle を持たせても、 # 他の端末で使用中のライブラリを unload してしまいうることには変わりない # と思います。 では -- kiken ara...@us... |