セグウェイジャパンの齋藤です。
いつもお世話になっております。
こちらでも同様に見える現象が発生しております。
Fedora7
OpenRTM-aist-1.0.0-RC1 (C++)
RtSystemEditor-1.0.0
の環境で、
Activate中に接続線をdeleteすると、それにつながったモジュールも死んでしまうことがあります。
まったく同様の現象かは判りませんが、
デバッグアウトプットしていたところ、
どうもOutPortに対してWriteするタイミングで死んでいるようです。
通常エラーログが出ずに、モジュールのプロセスがセグメンテーションエラーとなるところ、
稀に出現した出力がありますので添付致しました。
産総研の中島です。
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が死んでしまい、全体として機能しな
くなる場合がありうる状態です。
対応の方、よろしくお願いいたします。