[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 メーリングリストの案内