[openrtm-users 01148] Managerのshutdownに関連したバグ

Yuki Suga ysuga @ suou.waseda.jp
2010年 2月 27日 (土) 15:41:23 JST


OpenRTM-aist MLの皆さま:
早大の菅です.
いつもお騒がせしております.

さて今回は,C++ RELEASE1.0版のManagerについてです.
現在,RTC-scilabというツールを開発していますが,
RELEASE1.0になって基本的な動作は動くようになりましたが,
終了時の不具合が続いています.

特殊な使い方かもしれませんが,手動でshutdownする場合の不具合です.
ご検討ください.


■結論
Manager.cppにバグと思われる部分があり,
コードから以下の部分が気になっています.

○m_timerがNULLで初期化されていないため,timer_enable:NOとすると落ちる
○shutdown_nortcsがスペルミスでshutdown_onrtcsになっている
○手動でshutdownするとm_timerが残っているので悪さをするから,
m_timer->stopのコードをManager::shutdown内に含めるべきでは?




■詳細
RTC-scilabでは,C++版のOpenRTMに独自の
手続き型のインターフェースを備えたDLLを定義し,
scilabからロードすることによって
RTMとの相互通信を実現しています.

そこでダイナミックにRTCを生成・ポート追加/除去・削除をするために,
やはりManagerをscilabのプロセスから生成する必要があるのですが,
最初にno-blockingモードで生成して
ManagerのオブジェクトはDLL側のメモリ内に格納しておき,
必要によって独自定義の関数からアクセスしています.

そこで最後にDLLをアンロードする前に,Managerをshutdownしたいのですが,
shutdownをすると,1・2秒後にscilabプロセス全体が落ちます.
これはTimerクラスの仕業と考え,コードを読みましたところ,

○Timerがデフォルトで0.1秒ごとに,ManagerやNameServerなどの振る舞いを監視
している.
○Managerでは,rtc.confでmanager.shutdown_nortcsがYESだと,Managerが生成
したRTCが無くなると自動的にshutdownする.
○同じく,manager.timer_enableでtimerの生成を抑制できる

などが分かりました.
そこでいくつかコードを読んで気になる部分がありました.

■RTC::Manager::m_timerメンバが初期化されていない場合がある.
Managerのコンストラクタでm_timerがNULLに初期化されていないので,
timer_enable: NOを指定するとアクセス違反を起こします.
これは早急に改善してほしい部分です.

■shutdown_nortcs:NOが効かない?
Manager.cppの763行目あたりで,スペルミスがあります.
shutdown_nortcsとなるべき場所が,shutdown_onrtcsになっています.
ヘッダーファイルでもスペルミスが見られます.

このようにコード中に定数を配置するやり方は,
個人的には違和感を感じます.
自分はヘッダーなどでdefineするようにしていますがどうなのですか?
プログラミングは我流なので…


■手動でshutdownするとManager::m_timerが残っているのでは?
このおかげでshutdownが2回呼ばれます.
おそらく他の終了タスクも割り当てられているはずなので,
ここでもエラーが起きるはずです.

このshutdownメンバ関数内で,m_timer->stop()を呼び出せば問題は回避されま
すが,
他の終了処理の部分までは目を通していないので,
すべて解決かどうかは分かりません.


以上です.
至らない点など御座いましたら,お手数ですがご指摘いただけますでしょうか?
よろしくお願いします.

ではでは




-- 
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Yuki Suga, Ph.D.
Dept. of Creative Science and Engineering,
School of Modern Mechanical Engineering,m
Waseda University.
#59-325, 3-4-1 Ohkubo, Shinjuku-ku Tokyo, Japan.
TEL/FAX: +81-3-5285-0996
E-mail: ysuga @ suou.waseda.jp
URL: http://www.sugano.mech.waseda.ac.jp
URL: http://www.sugano.mech.waseda.ac.jp/~ysuga
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/



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