[openrtm-users 00259] Re: ExecutionContextの差し替え

Ando Noriaki n-ando @ aist.go.jp
2007年 11月 14日 (水) 08:56:49 JST


金広様

安藤です
> 金広@産総研です。
>
> 07/11/09 に Fumio Kanehiro<f-kanehiro @ aist.go.jp> さんは書きました:
> > > RTObjectとExecutionContext(EC)の関連付けは、
> > > ECに対してRTObjectをaddしてやる必要があります。
> > > RTObjectに対してECをattachしても正しく関連付けられないかもしれません。
> > >
> > > このあたりの処理シーケンスについては、OMGの以下のRTC仕様に従っています。
> > > (28ページ目くらい)
> > > http://www.omg.org/cgi-bin/doc?ptc/2007-08-18
>
> 上記仕様書によると、ExecutionContextをデタッチする際には、同様にECに
> 対してデタッチの指令を送ると、ECからRTObjectに対してデタッチの
> 指令が送られるように記述されています。
>
> PeriodicExecutionContext.cppの実装ではECが保持するリストからRTObject
> を消しているだけでRTObjectに対するデタッチ要求の送信は行っていない
> ようです。そのためRTObjectからECのリストを取得すると外したつもりのECが
> 含まれたままになっています。

すみません、これはバグですね。
ご報告ありがとうございます。
バグリストに追加しましたので、次のバージョンでは直します。

修正するとすれば、こんな感じでしょうか?

  ReturnCode_t
  PeriodicExecutionContext::remove(LightweightRTObject_ptr comp)
  {
    CompItr it;
    it = std::find_if(m_comps.begin(), m_comps.end(),
                      find_comp(RTC::LightweightRTObject::_duplicate(comp)));
    if (it == m_comps.end())
      return RTC::BAD_PARAMETER;
    // これが抜けてますね
    it->_ref->detach_executioncontext(it->_sm.ec_id);

    m_comps.erase(it);

    return RTC::RTC_OK;
  }

-- 
安藤慶昭@独立行政法人産業技術総合研究所 研究員
                   知能システム研究部門 タスクインテリジェンス研究グループ
                   〒305-8568 茨城県つくば市梅園1-1-1 中央第2
                   TEL: 029-861-5981 FAX: 029-861-5971
                   n-ando @ aist.go.jp, n-ando @ ieee.org



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