[openrtm-users 00905] ver 0.4.2におけるnon-blocking modeの不具合(?)

Yosuke Matsusaka yosuke.matsusaka @ aist.go.jp
2009年 8月 4日 (火) 15:35:13 JST


産総研の松坂です。

現在、OpenRTM-aist ver 0.4.2を使ってnon-blocking modeでマネージャを動作させる
スタンドアロンコンポーネントを作っているのですが、コンポーネント終了時にCORBA
エラーが出力されたり、connectorが掃除されずにpublisher側にエラーが出る問題に遭遇
しています。

コンポーネントを終了させた後にログを見てみると、
Aug 04 14:30:45 manager Manager::shutdownORB()
という行が複数出力されており、おかしいなと思い原因を探ったところ、Manager.hで
定義されるクラスOrbRunnerのメンバ関数svcで
m_pORB->run();
Manager::instance().shutdown();
となっている記述を見つけました。

non-blocking modeでマネージャを動作させるとOrbRunnerがスレッドとして動作すると
思うのですが、それをシャットダウンするときに、まず親プロセスのマネージャから
関数shutdownComponents内のm_pORB->exit()が呼び出されます。するとm_pORBが終了する
ことで上記の関数svcに記述された2行目のシャットダウンプロセスがOrbRunnerのスレッド上でも
始まってしまい、複数のシャットダウンプロセスが並進することで、不具合が発生しているのでは
ないかと思います。

推測違い or 既知の問題でしたらすいません。

ver 1.0.0で発生しない問題であれば影響は少ないですが、ver 0.4.2もまだかなり現役だと思います
ので対処方法を教えてください。

-- 
Yosuke Matsusaka, Ph.D  <yosuke.matsusaka @ aist.go.jp>
  Interaction Modeling Group /
  National Institute of Advanced Industrial Science and Technology (AIST)
  Tel: 029-862-6726  Web: http://staff.aist.go.jp/yosuke.matsusaka/



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