[openrtm-users 00596] Re: shutdown 処理についてのお伺い

Akio Uda uda-axa @ necst.nec.co.jp
2008年 9月 4日 (木) 10:47:45 JST


To: 静岡大 清水様

いつも御世話になります。宇田@NECシステムテクノロジーです

どうも詳細な情報をありがとうございます。確かにご指摘の通り、
shutdown()に伴って呼び出し元のコンポーネント自体も消滅して
しまうことを失念しておりました。

それでは、別スレッドを起動してshutdown()を呼ぶ方法を試して
みたいと思います。

ご教授ありがとうございました。


> 静岡大 清水です。
> 
> 終了処理に関しては、私も四苦八苦していますので、
> 私が知っている範囲内で情報提供します。
> 
> 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

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




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