[openrtm-users 00595] Re: shutdown 処理についてのお伺い
Masayuki Shimizu
masayuki.shimizu @ aist.go.jp
2008年 9月 4日 (木) 02:53:39 JST
静岡大 清水です。
終了処理に関しては、私も四苦八苦していますので、
私が知っている範囲内で情報提供します。
Manager::shutdown()では、マネージャが管理している
全てのコンポーネントをexit()します。
その際、各コンポーネントのCORBAオブジェクトが
POA上で非活性化されるので、それ以降、コンポーネントの
インタフェースをコールすることができなくなります。
したがって、コンポーネントからマネージャをshutdown
すると、自分自身もCORBAオブジェクトとして
存在できなくなります。
プログラムでは、onExecute()内でManager::shutdown()
を呼んでいるようですが、その場合、shutdown処理から
返った時点で、コンポーネントのCOBRAオブジェクトが
存在しなくなっています。onExecute()は、実行コンテキスト
が
CORBA経由でコールしているので、実行コンテキストから見る
と、
COBRA呼び出しをしている途中で、
呼び出しているCOBRAオブジェクトがPOAで非活性化されてしま
うため、
おかしなことになります。CORBAの場合、おそらく
このケースはExceptionとなると思われます。
ちょっと解説が長くなりましたが、要するに、
コンポーネント内からManager::shutdown()を
呼ぶのはよろしくないと思います。
マネージャをshutdown()するためには、
コンポーネント(実行コンテキスト)以外の
別スレッドから呼ぶ必要があるので、
自分でスレッドを上げて、その中でManger::shutdown()
を呼ぶと、より安全にマネージャを終了させることができます
。
清水
--- Akio Uda <uda-axa @ necst.nec.co.jp> wrote:
> いつも御世話になります。宇田@NECシステムテクノロジー
です
>
> 度々申し訳ありません。
>
> OpenRTM-aist-0.4.2 環境において、RTC::Manager の
> shutdown() を
> 呼んだ場合に、shutdownORB() の処理で SystemException
> が発生する
> ようなのですが、omniORB
> の設定で注意すべき点などはございますで
> しょうか?
>
> OpenRTM は Fedora
> 一括インストール・スクリプトを使っております。
> 再現環境を添付致しますので、もし使用法などに問題があり
ましたら
> ご指摘頂ければ幸いです。
>
> よろしくお願い申し上げます。
>
>
>
> ShutdownComp.h
> ┌──────────────────────────
───────┐
> │class ShutdownComp : public
> RTC::DataFlowComponentBase │
> │{
> │
> │ ・・
> │
> │ private:
> │
> │ RTC::Manager* m_manager;
> │
> │ int m_count;
> │
> │};
> │
> └──────────────────────────
───────┘
>
>
> ShutdownComp.cpp
> ┌──────────────────────────
───────┐
> │ShutdownComp::ShutdownComp(RTC::Manager* manager)
> │
> │ // <rtc-template block="initializer">
> │
> │ : RTC::DataFlowComponentBase(manager),
> │
> │ ・・
> │
> │ m_manager(manager),
> │
> │ m_count(10)
> │
> │ ・・
> │
> │{
> │
> │ ・・
> │
> │}
> │
> │
> │
> │
> │
> │RTC::ReturnCode_t
> ShutdownComp::onExecute(RTC::UniqueId ec_id) │
> │{
> │
> │ m_count--;
> │
> │ cout << "count douwn " << m_count << endl;
> │
> │ if(m_count==0){
> │
> │ cout << "shutdown start" << endl;
>
> │ m_manager->shutdown();
> …… ☆
> │ cout << "shutdown end" << endl;
>
> │ }
> │
> │ sleep(1);
> │
> │
> │
> │ return RTC::RTC_OK;
> │
> │}
> │
> └──────────────────────────
───────┘
>
>
> rtc27492.log
> ┌──────────────────────────
───────┐
> │・・
> │
> │manager Manager::shutdown()
> │
> │manager Manager::shutdownComponents()
> │
> │manager Manager::shutdownComponents()
> │
> │manager
> Manager::unregisterComponent(ShutdownComp0)
> │
> │manager Unbind name: ShutdownComp0.rtc
> │
> │naming_svc
> NamingManager::unbindObject(ShutdownComp0.rtc)
> │
> │manager Manager::shutdownNaming()
> │
> │naming_svc NamingManager::unbindAll(): 0 names.
> │
> │manager Manager::shutdownORB()
> │
> │manager No pending works of ORB. Shutting down POA
> and ORB. │
> │manager Caught SystemException during root POA
> destruction
> │manager Caught CORBA::SystemException during ORB
> shutdown …… ☆
> │・・
>
> └──────────────────────────
───────┘
>
>
>
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
> z 宇田 安規男
> z
> z NECシステムテクノロジー株式会社
> エンベデッドソフトウェア事業部 z
> z 神奈川県川崎市中原区下沼部 1753 NEC 玉川事業場
> S棟26F z
> z 〒 211-8666 Tel: 044-435-5657 Fax:
> 044-435-5629 z
> z E-mail: uda-axa @ necst.nec.co.jp
> z
>
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
>
>
>
--------------------
Masayuki Shimizu
Assistant Professor
Department of Mechanical Engineering
Faculty of Engineering
Shizuoka University
3-5-1, Johoku, Naka-ku, Hamamatsu 432-8561, JAPAN
openrtm-users メーリングリストの案内