株式会社セック 大和田様
お世話になっております。
産総研 栗原です。
> [原因]
> RTObject_impl::shutdown()が呼ばれると、
> m_finalized(Mutexとvectorの構造体)というリストに、
> 削除対象のインスタンスのポインタがpush_backで登録される。
> cleanupComponent()が呼ばれたタイミングでインスタンスを削除するが、
> その後、登録したポインタが pop も delete もされていない。
詳細な調査をして頂き、有難うございます。
この問題に関しましては、早稲田大学の菅様よりご報告頂きましたManager
関連のバグ(メーリングリストの"[openrtm-users 01148])の修正の際に合わせ
て修正させて頂いております。
修正点としましては、Manager::cleanupComponent()の最後に
m_finalized.comps.clear()を追加しました。
なお、登録したポインタのdeleteは、Manager::deleteComponent()内から
呼び出しております、factory->destroy(comp);にて行っております。
Managerクラスにつきましては、他にもいくつか修正箇所がございまして、
メーリングリスト[openrtm-users 01149]で添付されていたパッチにて修正
済みです。
メーリングリスト01149にて添付されていたパッチと同じものを添付させて
頂いております。
お手数ですが、添付のパッチを当てるか、以下から最新のソースをチェック
アウトして頂けますでしょうか。
http://openrtp.jp/openrtm/svn/OpenRTM-aist/branches/RELENG_1_0/OpenRTM-aist
以上、宜しくお願い致します。
On Wed, 24 Mar 2010 13:10:48 +0900
Tasuku Owada wrote:
> 産総研 安藤様
>
> 株式会社セックの大和田です。
> お世話になっております。
>
> cleanupComponent()時にコンポーネントが強制終了してしまう
> 場合がありますので、ご報告させていただきます。
> 以下、詳細になります。
>
> [現象]
> cleanupComponent()でセグメントエラーで強制終了する。
>
> [再現方法]
> 1. オプションを以下に設定する
> "logger.enable" : YES
> "logger.log_level" : TRACE
> "manager.naming_formats" : "test.mgr"
> "manager.is_master" : YES
> "manager.shutdown_auto" : NO
> "manager.shutdowwn_onrtcs" : NO
> "timer.enable" : YES
> 2. createComponent()でコンポーネントを生成
> 3. finalize()でコンポーネントを削除する
>
> [原因]
> RTObject_impl::shutdown()が呼ばれると、
> m_finalized(Mutexとvectorの構造体)というリストに、
> 削除対象のインスタンスのポインタがpush_backで登録される。
> cleanupComponent()が呼ばれたタイミングでインスタンスを削除するが、
> その後、登録したポインタが pop も delete もされていない。
>
> ご確認お願い致します。
>
> 以上、宜しくお願い致します
>
産総研 安藤様
株式会社セックの大和田です。
お世話になっております。
cleanupComponent()時にコンポーネントが強制終了してしまう
場合がありますので、ご報告させていただきます。
以下、詳細になります。
[現象]
cleanupComponent()でセグメントエラーで強制終了する。
[再現方法]
1. オプションを以下に設定する
"logger.enable" : YES
"logger.log_level" : TRACE
"manager.naming_formats" : "test.mgr"
"manager.is_master" : YES
"manager.shutdown_auto" : NO
"manager.shutdowwn_onrtcs" : NO
"timer.enable" : YES
2. createComponent()でコンポーネントを生成
3. finalize()でコンポーネントを削除する
[原因]
RTObject_impl::shutdown()が呼ばれると、
m_finalized(Mutexとvectorの構造体)というリストに、
削除対象のインスタンスのポインタがpush_backで登録される。
cleanupComponent()が呼ばれたタイミングでインスタンスを削除するが、
その後、登録したポインタが pop も delete もされていない。
ご確認お願い致します。
以上、宜しくお願い致します