坂口様
産総研 安藤です
ご報告ありがとうございました。
とりあえず、以下のパッチで1.と2.(2)については
対処可能かと思います。お試しいただけないでしょうか?
2.(1)については、現在のところInPortおよびサービスポートは
相手のポートの生死を判断して、自動的にdisconnectする
仕組みが備わっておらず、そういう仕様になっております。
InPortに関しては、何らかの方法でそうした仕組みを
導入したいと考えています。RELEASE版には入ると思います。
サービスポートに関しては、、、、難しそうですね。
何かいいアイディアがございましたら教えていただけませんか?
以上、よろしくお願いいたします。
2009/07/30 23:04 に Tomoya Sakaguchi さんは書きました:
> OpenRTM-aist開発者各位
>
> セックの坂口です。
> お世話になっております。
>
> OpenRTM 1.0.0-RC1において、以下の不具合が見受けられましたので、
> ご報告いたします。
>
> 1.PortBase継承クラスの利用時にメモリリーク
> 2.ポートの切断時の不具合
>
> 以下、詳細です。
> ----
>
> 1.PortBase継承クラスの利用時にメモリリーク
> メモリリークは、PortBaseを継承したクラス(CorbaPortなど)利用時に
> 発生します。具体的には、PortBaseを継承したクラスのオブジェクトを
> 宣言し、オブジェクトのスコープを抜けても、そのオブジェクトのメモリが
> 解放されていないようです。
>
> 2.ポートの切断時の不具合
> 本不具合は、2点あります。
>
> (1)InPortのConnectorProfileが残る
> InPortを持つRTCと、OutPortを持つRTCを起動し、RtSystemEditorにより
> ポートの接続を行い、OutPortを持つRTCを不正終了させた後、再起動して
> 再度ポート接続を行います。不正終了とは、右上の×ボタンの押下です。
> このとき、InPortのConnectorProfileは最初に接続したときの情報が
> 残ってしまいます。
>
> (2)write()呼び出しにより例外が発生
> 上記2RTCのポート接続をRtSystemEditorではなく、他アプリで
> 行います。このとき、ConnectorProfileのportsにはInPort、OutPortの
> 順に情報を代入し、connect()を実行します。
> そして、InPortを持つRTCを不正終了させ、OutPortのwrite()メソッドを
> 呼び出すとCORBA::Exceptionが返されます。
>
> ポート切断処理は、ポートの情報がConnectorProfileのportsに登録された
> 順番で行われます。InPortを持つRTCが不正終了し、write()の呼び出しに
> 失敗したとき、disconnect()が呼ばれます。このとき、OutPortにおいて、
> ConnectorProfileのportsにInPortの情報があった場合、CORBA通信が発生
> し、参照できないために例外が発生するものと思われます。
>
> 以上です。ご確認お願いいたします。
>
OpenRTM-aist開発者各位
セックの坂口です。
お世話になっております。
OpenRTM 1.0.0-RC1において、以下の不具合が見受けられましたので、
ご報告いたします。
1.PortBase継承クラスの利用時にメモリリーク
2.ポートの切断時の不具合
以下、詳細です。
----
1.PortBase継承クラスの利用時にメモリリーク
メモリリークは、PortBaseを継承したクラス(CorbaPortなど)利用時に
発生します。具体的には、PortBaseを継承したクラスのオブジェクトを
宣言し、オブジェクトのスコープを抜けても、そのオブジェクトのメモリが
解放されていないようです。
2.ポートの切断時の不具合
本不具合は、2点あります。
(1)InPortのConnectorProfileが残る
InPortを持つRTCと、OutPortを持つRTCを起動し、RtSystemEditorにより
ポートの接続を行い、OutPortを持つRTCを不正終了させた後、再起動して
再度ポート接続を行います。不正終了とは、右上の×ボタンの押下です。
このとき、InPortのConnectorProfileは最初に接続したときの情報が
残ってしまいます。
(2)write()呼び出しにより例外が発生
上記2RTCのポート接続をRtSystemEditorではなく、他アプリで
行います。このとき、ConnectorProfileのportsにはInPort、OutPortの
順に情報を代入し、connect()を実行します。
そして、InPortを持つRTCを不正終了させ、OutPortのwrite()メソッドを
呼び出すとCORBA::Exceptionが返されます。
ポート切断処理は、ポートの情報がConnectorProfileのportsに登録された
順番で行われます。InPortを持つRTCが不正終了し、write()の呼び出しに
失敗したとき、disconnect()が呼ばれます。このとき、OutPortにおいて、
ConnectorProfileのportsにInPortの情報があった場合、CORBA通信が発生
し、参照できないために例外が発生するものと思われます。
以上です。ご確認お願いいたします。