プロジェクト

全般

プロフィール

バグ #2175

RTC終了時、on_shutdownとon_finalizeの呼び出される順番が逆

kurihara12年以上前に追加. 12年以上前に更新.

ステータス:
終了
優先度:
通常
担当者:
-
対象バージョン:
-
開始日:
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()の順に呼ばれている。

関係しているリビジョン

リビジョン 2193 (差分)
n-ando12年以上前に追加

ExecutionContext's stop() should be called after deactivate_component()
operation in exit() process. refs #2175

リビジョン 2193 (差分)
n-ando12年以上前に追加

ExecutionContext's stop() should be called after deactivate_component()
operation in exit() process. refs #2175

履歴

#1 n-ando12年以上前に更新

RTObject_impl::finalize()内のshutdown();は実際にはon_shutdownとは関係なくてポート等の終了処理とCORBAオブジェクトの非アクティブ化のための関数。

#2 n-ando12年以上前に更新

  • ステータス新規 から 終了 に変更
  • 進捗率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;

他の形式にエクスポート: Atom PDF