バグ #1181
完了OpenRTM-aist(C++)-1.0.0-RELEASE版でメモリーリークが発生する
100%
説明
DataPort.idlで定義されているオペレーションget()を実行するとメモリーリークが発生する。
「DataflowType: pull」で接続した場合に、get()が呼ばれる。
examples/tests/DataPortTest.py の動作テストによりメモリーリークを確認した。
匿名ユーザー さんがほぼ15年前に更新
- ステータス を 新規 から 解決 に変更
- 進捗率 を 0 から 100 に変更
「DataflowType: pull」接続におけるメモリーリークの原因は、
OutPortPullConnector、InPortPullConnector のdisconnect() で、
m_provider、m_buffer、m_consumer などを削除していなかった為である。
・OutPortPullConnector::disconnect()に以下を追加。
// delete provider
if (m_provider != 0)
{
OutPortProviderFactory& cfactory(OutPortProviderFactory::instance());
cfactory.deleteObject(m_provider);
}
m_provider = 0;
// delete buffer
if (m_buffer != 0)
{
CdrBufferFactory& bfactory(CdrBufferFactory::instance());
bfactory.deleteObject(m_buffer);
}
m_buffer = 0;
・InPortPullConnector::disconnect()に以下を追加。
// delete consumer
if (m_consumer != 0)
{
OutPortConsumerFactory& cfactory(OutPortConsumerFactory::instance());
cfactory.deleteObject(m_consumer);
}
m_consumer = 0;
この改修により、継続的なメモリーリークの発生はなくなった。
リビジョン 1891 にて対処。
以上