[openrtm-users 00982] [1.0.0-RC1] データ送信中に接続線をdeleteするとRTCが死んでしまう
Yusuke Nakajima
y.nakajima @ aist.go.jp
2009年 10月 30日 (金) 13:24:42 JST
産総研の中島です。
Ubuntu8.04環境にて、OpenRTM-aist-1.0.0-RC1 (C++)
とRtSystemEditor-1.0.0を使用しています。
(timestamp用のパッチ適用済みのもの)
RtSystemEditor上で、OutPortを持つRTCとInPortを持つRTCを
接続し、Activateさせ、データの送受信を行う単純なRTC群を
用意し、Activate中に(Deactivateさせずに)、その接続線を
deleteすると、RTCが消えてしまい、(NameServer上ではゾンビ)
以下のようなメッセージのいずれかを吐いて死んでいることがあります。
ちなみに、RTC自体は、onDeactivate()やonAbort()、onError()などには
遷移せずに死んでいます。
=====
[1]
"$ Segmentation Fault"
[2]
"$ illegal error"
[3]
"$ pure virtual method called terminate called without an active
exception
$ Aborted"
=====
上記3パターンのいずれかを出しますが、どれがどういう場合に
出るのか、再現性が不明で把握しておりません。
(遭遇したのは上記3パターンのみですが、他もあるかもしれません。)
また、この現象は必ず発生する訳ではなく、推測ですが、データ送信途中で
線が切られると起こるように思えます。排他制御が効いていない?
全体の負荷が軽いと起こらないようで、その場合は、1サイクル内でデータ送信
が早めに終了していて、その後に線をdeleteしているのかもしれません。
単純なサンプルを添付します。「testA」-->「testB」とDataPort接続し、
「testA」側で毎onExecute()でデータを送信し、「testB」で受信したものを
出力するのみです。
これを、1台のPCでローカル環境で行っていると、なかなか症状が再現されない
のですが、2台のPCに分散させ、私の場合無線環境でNameServerに飛ばし、かつ、
rtc.conf内のrateを「1000000」くらいにし、極力、RTCの1サイクル中はデータ
送信処理で負荷を占めるようにさせてトライしたところ、線をdeleteすると
「testA」が死んでしまう現象が何度か再現できました。
ということで、RTC群がActivateされている状態で、動的にPortの接続などを
変更しようとすると、場合によってはRTCが死んでしまい、全体として機能しな
くなる場合がありうる状態です。
対応の方、よろしくお願いいたします。
-----------------------------------------------------
〒305-8568
茨城県つくば市梅園1-1-1 つくば中央第2 本部情報棟 3204室
独立行政法人 産業技術総合研究所
知能システム研究部門 ヒューマノイド研究グループ
中島 裕介 (Yusuke Nakajima)
TEL: 029-861-5080(内線55267)
mailto: y.nakajima @ aist.go.jp
-----------------------------------------------------
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: sample.zip
型: application/x-zip-compressed
サイズ: 28576 バイト
説明: 無し
URL: <http://www.openrtm.org/pipermail/openrtm-users/attachments/20091030/6cd42872/attachment-0001.bin>
openrtm-users メーリングリストの案内