[openrtm-users 00895] Re: OpenRTM1.0.0-RC1 の OutPort に値が格納できない不具合

俵 崇文@AIST tawara-takafumi @ aist.go.jp
2009年 8月 3日 (月) 10:03:22 JST


安藤様、清水様

お世話になっております。俵です。
返信ありがとうございます。

m_connectorsのサイズに関しては、
[openrtm-users 00879]で報告いたしましたとおりです。
デバッガによる追跡は何度も繰り返し行なったので
見間違えではないと断言いたします。

接続処理の終わりからwriteメソッドの呼び出しの間に
原因があるというご指摘を参考にして調査いたします。
何か分かれば、また報告いたします。
以上です。

Ando Noriaki wrote 2009/07/31 18:18:
> 俵様
> 
> 安藤です
> 
> いただいたlogの424行目で、
> Jul 31 17:04:18 TRACE: steer: getConnectorProfiles(): size = 1
> とありますので、m_connectorsのサイズは1ですね。
> 
> OutPortBase.cpp 200行目あたりで以下のようにログを出力しています。
>   ConnectorBase::ProfileList OutPortBase::getConnectorProfiles()
>   {
>     RTC_TRACE(("getConnectorProfiles(): size = %d", m_connectors.size()));
> 
> デバッガでご覧になった0という数値は、本当にm_connectorsのsize()ですか?
> 
> いただいたlogをgetConnectorProfilesでgrepしたのですが、
> 
>> grep 'getConnectorProfiles' rtc4472.log
> Jul 31 17:04:18 TRACE: steer: getConnectorProfiles(): size = 1
> Jul 31 17:04:18 TRACE: vel: getConnectorProfiles(): size = 1
> Jul 31 17:04:19 TRACE: steer: getConnectorProfiles(): size = 1
> Jul 31 17:04:19 TRACE: vel: getConnectorProfiles(): size = 1
> Jul 31 17:04:20 TRACE: steer: getConnectorProfiles(): size = 1
> Jul 31 17:04:20 TRACE: vel: getConnectorProfiles(): size = 1
> 
> このように、steerポートもvelポートもどちらも m_connectors のサイズは
> 1となっており、ログの結果からも、少なくともPortBaseのConnectorProfile、
> OutPortのOutPortConnectorの数、ともに正常なようにみえます。
> 
> 他のところに原因があるのではないでしょうか?
> 
> 
Masayuki Shimizu wrote 2009/07/31 18:15:
> 俵様
>
> 清水です。
>
> 安藤さんが言っているように、
>>> Jul 28 15:08:10 TRACE: steer: OutPortPushConnector
>> created
>>> Jul 28 15:08:10 PARANOID: steer: connector push
>> backed: 1
> とあるので、m_connectorsのサイズがゼロという
> ことは無いように思います。
> # OutPortBase.cppのソース参照
> RTC_PARANOID(("connector push backed: %d",
> m_connectors.size()));
>
> どうやってm_connectorsのサイズを確かめてますか?
>
> 上記のログがあるのにm_connectorsのサイズが
> ゼロということは、あと考えられる可能性としては、
> 接続をした後で、何かしらの意図しない動作により
> 接続が解除されてしまっているとしか
> 考えられません。
>
> 清水
>
> 2009/07/31 17:41 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
>> 安藤様
>>
>> お世話になっております。俵です。
>>
>> 下記コードを適応したログを添付いたします。
>> 出力タイミングは、これまでの通り
>> steerポートとvelポートのwriteメソッドの直前になります。
>>
>> 以上です。
>> よろしくお願いします。
>>
>> Ando Noriaki wrote 2009/07/31 16:29:
>>> 俵様
>>>
>>> 安藤です
>>>
>>> 前回のメールで申し上げた通り、ConnectorProfileは存在するが、
>>> m_connectorsのサイズが0ということですよね。
>>> いただいたコードと表示結果からは、ConnectorProfileは正常である
>>> ということしかわかりません。
>>> ただし、以前いただいたログには
>>> Jul 28 15:08:10 TRACE: steer: OutPortPushConnector created
>>> Jul 28 15:08:10 PARANOID: steer: connector push backed: 1
>>> とあるので、connector は生成されているっぽいです。
>>>
>>> とりあえず、OutPortのPushConnectorのProfileを
>>> 以下のようにして表示させてみていただけますか?
>>>
>>>   ConnectorBase::ProfileList prof(m_outport.getConnectorProfiles());
>>>   for (int i(0), len(prof.size()); i < len; ++i)
>>>   {
>>>     RTC_DEBUG(("ConnectorProfile::name: %s", prof[i].name));
>>>     RTC_DEBUG(("ConnectorProfile::id: %s", prof[i].id));
>>>     RTC_DEBUG(("ConnectorProfile::properties:"));
>>>     rtclog.level(Logger::RTL_DEBUG) << prof[i].properties;
>>>   }
>>>
>>>
>>>
>>>
>>> 2009/07/31 15:39 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
>>>> 安藤様、清水様
>>>>
>>>> お世話になっております。俵です。
>>>>
>>>> 助言を参考にして
>>>> PortService,ConnectorProfile,ConnectorProfile::ports
>>>> の状態を表示する関数を添付ファイルのように変更しました。
>>>> 表示結果も合わせて添付いたします。
>>>>
>>>> ConnectorProfileは結果の通り存在しますが、
>>>> m_connectorsのサイズはデバッガ上確認した場合0のままでした。
>>>> 以上です。
>>>> よろしくお願いいたします。
>>>>
>>>> Ando Noriaki wrote 2009/07/31 11:45:
>>>>> 俵様
>>>>>
>>>>> 安藤です
>>>>>
>>>>> out()関数は、オペレーションのout引数に_var型変数を渡す時に使うものです。
>>>>>
>>>>> out()を呼ぶとオブジェクトリファレンスがreleaseされてnilリファレンス
>>>>> になりますので、その後新たにオブジェクトリファレンスを代入しない限り
>>>>> omniORB: ERROR -- the application attempted to invoke an operation
>>>>>  on a nil reference.
>>>>> のようなエラーが出ます。
>>>>>
>>>>>
>>>>> 2009/07/31 11:38 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
>>>>>> 安藤様
>>>>>> お世話になっております。 俵です。
>>>>>>
>>>>>>> portServiceList[h]->get_connector_profiles()->length();
>>>>>>> を呼ぶ前に
>>>>>>> portServiceList[h].out()
>>>>>>> を呼んでいませんか?
>>>>>> はい。呼んでおります。
>>>>>>
>>>>>> 以上です。
>>>>>>
>>>>>> Ando Noriaki wrote 2009/07/31 10:43:
>>>>>>> 俵様
>>>>>>>
>>>>>>> 安藤です
>>>>>>>
>>>>>>> portServiceList[h]->get_connector_profiles()->length();
>>>>>>> を呼ぶ前に
>>>>>>> portServiceList[h].out()
>>>>>>> を呼んでいませんか?
>>>>>>>
>>>
>>>
>>
>> --
>> _/_/_/_/_/_/_/_/_/_/_/_/_/
>> 株式会社 スプリング(http://www.spring.cc/)
>> つくば事業所 俵 崇文
>> 俵 崇文@スプリング<tawara @ spring-inc.co.jp>
>> 俵 崇文@AIST<tawara-takafumi @ aist.go.jp>
>> 事業所 TEL:029-871-7710
>> 事業所 FAX:029-830-7037
>> _/_/_/_/_/_/_/_/_/_/_/_/_/
>>
> 
> 
> 


-- 
_/_/_/_/_/_/_/_/_/_/_/_/_/
株式会社 スプリング(http://www.spring.cc/)
つくば事業所 俵 崇文
俵 崇文@スプリング<tawara @ spring-inc.co.jp>
俵 崇文@AIST<tawara-takafumi @ aist.go.jp>
事業所 TEL:029-871-7710
事業所 FAX:029-830-7037
_/_/_/_/_/_/_/_/_/_/_/_/_/




openrtm-users メーリングリストの案内