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