OpenRTM / OpenRTM-aist

OpenRTM-aist: RT-Middleware and OMG RTC implementation in C++ implemented by AIST
https://openrtm.org/
Other
19 stars 12 forks source link

coil::AsyncInvoker が資源漏れを起こすか、使用者が解放していない #510

Open r-kurose opened 5 years ago

r-kurose commented 5 years ago

Describe the bug

  1. AsyncInvoker() に auto_delete フラグがあるが、 join() されないため、資源がリークする
  2. サンプルコンポーネントの AsyncInvoker() 使い方が間違っており、 auto_delete =false なのに、Task::wait() していない。

To Reproduce Throughput または SimpleService を動かす。

Reproducibility 100%

Expected behavior 資源解放もれがないこと。

Screenshots or Logs なし

Environment

Additional context AsyncInvoker が join ではなく、 detach を使う方法もあるが、 その場合は coil::Task からの派生はやめないと delete タイミングがない。 AsyncInvoker はバグを引き起こすので廃止するのがよさそう。 Async をそのまま用いるか std::async でもつかって、非同期実行中のオブジェクトはコンポーネントが管理するのが妥当。

n-ando commented 5 years ago

Async/AsyncInvokerを使う方法は非推奨とし、std::asyncを使うものとします。 Async/AsyncInvokerはしばらく残しますが、pragmaでエラーメッセージを出し、std::asyncへ移行するよう促してください。