俵様
安藤様
清水です。
ログを見る限りでは、m_connectorsのサイズは
やはり1のように思われます。
ただ、コネクタのwrite()は
呼ばれてないようですね。
コネクタタイプがPushであれば、
OutPortのwriteから
OutPortPushConnector::write()が呼ばれ、
ログに「write()」と残るはずです。
どうもそれが見当たらないので、
コネクタのwriteまで辿り着いてない
と思われます。
不可解な挙動ですが、OutPort::write()
から動きを丹念にトレースしていけば、
原因がつかめると思います。
# 安藤様へ
Pull型のOutPortBase::createConnector()
ですが、ログ出力が"OutPortPushConnector created"
となってますが、"Pull"でなくてよいのでしょうか。
あと、OutPortPullConnectorのオペレーションには
ログ出力が無いので、今回のように挙動を
トレースする際に困るように思います。
清水
俵様
安藤です
>
> rtm/OutPort.hによると
> その後の処理で
> conn_sizeが0以下の場合
> m_connectors[i]->write(m_cdr);
> のループ処理に至らないということで
> 同じ結果になると思われます。
> 以上です。
Aug 03 10:50:00 TRACE: steer: getConnectorProfiles(): size = 1
でも、ログ↑にあるように、m_connectors.size() は1を返していますよね。
write()関数の先頭部分で
size_t conn_size(m_connectors.size());
のように代入しているので、conn_sizeは1になりそうな気がしますが。
念のため、OutPort.h の write() の後半を以下のように書き換えて
ログを見てみてはどうでしょうか?
bool result(true);
RTC_PARANOID(("0: conn_size = %d", conn_size));
RTC_PARANOID(("0: connectos.size() = %d", m_connectors.size()));
for (size_t i(0), len(conn_size); i < len; ++i)
{
ReturnCode ret;
ret = m_connectors[i]->write(m_cdr);
RTC_PARANOID(("1: conn_size = %d", conn_size));
RTC_PARANOID(("1: connectos.size() = %d", m_connectors.size()));
if (ret != PORT_OK)
{
result = false;
if (ret == CONNECTION_LOST)
{
disconnect(m_connectors[i]->id());
}
}
}
RTC_PARANOID(("2: conn_size = %d", conn_size));
RTC_PARANOID(("2: connectos.size() = %d", m_connectors.size()));
return result;
あと、ためしにコンポーネントのソースを送ってみてもらえますか?