[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 メーリングリストの案内