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

Manager終了時にshutdownLogger関数が呼ばれない #562

Closed Nobu19800 closed 5 years ago

Nobu19800 commented 5 years ago

Describe the bug Managerを終了した場合にshutdownLogger関数が呼ばれない場合がある。

To Reproduce Steps to reproduce the behavior:

  1. ConsoleInComp.exeなどでRTCを起動する
  2. Ctrl+CでManagerを終了する
  3. See error

Reproducibility 不明

Expected behavior Manager終了時には必ずshutdownLogger関数を呼ぶようにする。

Screenshots or Logs

Environment

Additional context 以下のように終了待ち合わせをshutdownLogger関数の前で実行していることが原因。

    shutdownManager();
    // 終了待ち合わせ
    if (m_runner != nullptr)
      {
        m_runner->wait();
      }
    else
      {
        join();
      }
    m_listeners.manager_.postShutdown();
    shutdownLogger();

ただ、待ち合わせする相手のrunManager関数でjoin関数の直前にログの出力を行っているため、join関数の前にshutdownLogger関数を実行するだけでは解決しません。

  void Manager::runManager(bool no_block)
  {
    if (no_block)
      {
        RTC_TRACE(("Manager::runManager(): non-blocking mode"));
        m_runner = new OrbRunner(m_pORB);
        m_runner->open(nullptr);
      }
    else
      {
        RTC_TRACE(("Manager::runManager(): blocking mode"));
        m_pORB->run();
        RTC_TRACE(("Manager::runManager(): ORB was terminated"));
        join();
      }
    return;
  }
Nobu19800 commented 5 years ago

575 でManagerの終了処理が変わったため解決しました。このissueはCloseします。