バグ #2137
ComponentObserver付きのRTCで2つのRTSEから操作すると有るケースで落ちる
100%
説明
栗原です。
ComponentObserverのテストで以下のような問題がでましたので、
報告致します。
RTM側の問題なのか、ツール側の問題なのかまでは調査できてません。
使用しているRTSEは、rtmtoolsのリビジョン177です。
http://www.openrtm.org/pub/OpenRTM-aist/ROBOMEC2011/eclipse342_rtmtools110release_win32_ja.zip
からダウンロードできます。
症状としましては、RTSEを2つ起動し、一つのRTCをそれぞれのRTSEの
システムダイアログにDnD後に、最初にDnDした方の、システムダイアグラム
上のRTCを削除し、その後、ネームサービスビュー上のRTCをクリックすると
RTCはセグメンテーションフォールトで異常終了します。
なお、使用したRTCは、ConsoleOutです。
1. RTSE1のネームサービスビューからシステムダイアグラムにRTCをDnD.
2. RTSE2のネームサービスビューからシステムダイアグラムにRTCをDnD.
3. RTSE1のシステムダウアグラム上のRTCをDeleteボタンにて削除
4. RTSE1のネームサービスビュー上のRTCをクリック。 ここで、RTCがセグメンテーションフォールトで落ちる。
関係しているリビジョン
リビジョン 2127
(差分)
リビジョン 2127
(差分)
ListenersHolder's listener list are now guarded by mutex. refs #2137
リビジョン 2128
(差分)
Some debug prints have been added to debug refs #2137 issue.
Mutex guard's position has been changed. But the bug is not fixed.
リビジョン 2128
(差分)
Some debug prints have been added to debug refs #2137 issue.
Mutex guard's position has been changed. But the bug is not fixed.
履歴
#2 n-ando がほぼ13年前に更新
- 進捗率 を 30 から 50 に変更
- addSdoServiceConsumer
- removeSdoServiceConsumer
内で落ちていることが判明。
Guradの位置をいくつか変えると、Segmentation Faultの頻度は減ったものの、まだ落ちることが有る。
addSdoServiceの場合以下の場所で落ちているようである。
{ // re-initialization std::string id(sProfile.id); for (size_t i(0); i < m_consumers.size(); ++i) { if (id == static_cast<const char*>(m_consumers[i]->getProfile().id)) { RTC_INFO(("Existing consumer is reinitilized.")); RTC_DEBUG(("Propeteis are: %s", NVUtil::toString(sProfile.properties).c_str())); return m_consumers[i]->reinit(sProfile); } } }
ListenersHolder's listener list are now guarded by mutex. refs #2137