操作
バグ #2175
完了RTC終了時、on_shutdownとon_finalizeの呼び出される順番が逆
ステータス:
終了
優先度:
通常
担当者:
-
対象バージョン:
-
開始日:
2011/06/29
期日:
進捗率:
100%
予定工数:
説明
株式会社セック 小田桐様からの報告
・RTC終了時、on_shutdownとon_finalizeの呼び出される順番が 逆ではないかと思います。 RTCを終了させる際、on_finalizeが呼ばれてから on_shutdownが呼ばれています。 OMGのRTC Specification 5.2.2.6.3 stop によれば、 on_shutdownの後にon_finalizeが呼ばれなければならないと 思います。
RTObject.cppのRTObject_impl::finalize()内、ReturnCode_t ret(on_finalize()); とshutdown();
が逆になっているため、on_finalize() > on_shutdown()の順に呼ばれている。
n-ando さんが13年以上前に更新
- ステータス を 新規 から 終了 に変更
- 進捗率 を 0 から 100 に変更
実際には、RTObject_impl::exit() の中で、owned ECのdeactivateを行っているが、このときExecutionContext::stop()が呼ばれるべきであった。
以下のように変更
--- RTObject.h (revision 2191) +++ RTObject.h (working copy) @@ -4883,7 +4883,9 @@ { if (!::CORBA::is_nil(ec) && !ec->_non_existent()) { + ec->deactivate_component(RTC::LightweightRTObject::_duplicate(m_comp)); + ec->stop(); } } LightweightRTObject_var m_comp;
操作