金広さま
安藤です
ご報告ありがとうございました。
こちらでも調査してみたいと思います。
ちなみに、RingBuffer::read() 内には m_empty.mutex と m_full.mutex
がありますが、どちらで止まっているかお分かりになりますでしょうか?
2010年6月17日17:37 Fumio Kanehiro :
> 金広@産総研です。
>
> OpenRTM-1.0.0-RELEASE-C++をソースからコンパイルしてUbuntu10.04で使用しています。
>
> TimedDoubleSeq型のデータを入力するInPortに対してisNew()で読み出せるデータが
> あることを確認した上でread()を呼び出しているにも関わらず、read()でブロックされ、返ってこなく
> なる場合があるようです。
> その状態でgdbからinterruptをかけ、backtraceすると以下のようにmutexが取得できずに止まっている
> ようです。
>
> (gdb) bt
> #0 0x00ce4422 in __kernel_vsyscall ()
> #1 0x00986af9 in __lll_lock_wait () from /lib/tls/i686/cmov/libpthread.so.0
> #2 0x0098213b in _L_lock_748 () from /lib/tls/i686/cmov/libpthread.so.0
> #3 0x00981f61 in pthread_mutex_lock () from /lib/tls/i686/cmov/libpthread.so.0
> #4 0x0027f22f in
> RTC::RingBuffer::read(cdrMemoryStream&, long, long)
> () from /usr/local/lib/libRTC-1.0.0.so.0
> #5 0x00246bc7 in RTC::InPortPushConnector::read(cdrMemoryStream&) ()
> from /usr/local/lib/libRTC-1.0.0.so.0
> #6 0x07811aaa in RTC::InPort::read() ()
>
> この現象が発生する時の状況ですが、rtcdに10種類ほどのモジュールをロードし、10個ほどのRTCを
> 生成し、それらを異なる周期で動作する3つのExecutionContextで実行させた場合にランダムな
> タイミングで生じています。ログレベルを変えたりすると現象が起きなくなったりするので、微妙な
> タイミングによって生じる問題なのではないかと考えています。
>
> 現象を再現させられるミニマムセットを作るのが難しいのですが、類似した現象に対する修正が
> 1.0.0-RELEASE以降にありましたでしょうか?
> (ちなみにdebパッケージの1.0.0-2も試してみましたが同じ現象が起きました)
>
>
金広@産総研です。
OpenRTM-1.0.0-RELEASE-C++をソースからコンパイルしてUbuntu10.04で使用しています。
TimedDoubleSeq型のデータを入力するInPortに対してisNew()で読み出せるデータが
あることを確認した上でread()を呼び出しているにも関わらず、read()でブロックされ、返ってこなく
なる場合があるようです。
その状態でgdbからinterruptをかけ、backtraceすると以下のようにmutexが取得できずに止まっている
ようです。
(gdb) bt
#0 0x00ce4422 in __kernel_vsyscall ()
#1 0x00986af9 in __lll_lock_wait () from /lib/tls/i686/cmov/libpthread.so.0
#2 0x0098213b in _L_lock_748 () from /lib/tls/i686/cmov/libpthread.so.0
#3 0x00981f61 in pthread_mutex_lock () from /lib/tls/i686/cmov/libpthread.so.0
#4 0x0027f22f in
RTC::RingBuffer::read(cdrMemoryStream&, long, long)
() from /usr/local/lib/libRTC-1.0.0.so.0
#5 0x00246bc7 in RTC::InPortPushConnector::read(cdrMemoryStream&) ()
from /usr/local/lib/libRTC-1.0.0.so.0
#6 0x07811aaa in RTC::InPort::read() ()
この現象が発生する時の状況ですが、rtcdに10種類ほどのモジュールをロードし、10個ほどのRTCを
生成し、それらを異なる周期で動作する3つのExecutionContextで実行させた場合にランダムな
タイミングで生じています。ログレベルを変えたりすると現象が起きなくなったりするので、微妙な
タイミングによって生じる問題なのではないかと考えています。
現象を再現させられるミニマムセットを作るのが難しいのですが、類似した現象に対する修正が
1.0.0-RELEASE以降にありましたでしょうか?
(ちなみにdebパッケージの1.0.0-2も試してみましたが同じ現象が起きました)