操作
バグ #3978
完了shutdownOnNoRtcs関数で終了する場合にエラーが表示される
開始日:
2017/03/07
期日:
進捗率:
100%
予定工数:
説明
shutdownOnNoRtcs関数で終了する際に以下のエラーが表示されるので修正する。
Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/OpenRTM_aist/CorbaNaming.py", line 157, in isAlive if self._rootContext._non_existent(): File "/usr/local/lib/python2.7/dist-packages/omniORB/CORBA.py", line 561, in _non_existent return self._obj.nonExistent()
n-miyamoto さんがほぼ8年前に更新
- ステータス を 新規 から 解決 に変更
- 進捗率 を 0 から 100 に変更
発生個所は、NamingManagerのネームサーバ確認、再登録処理の部分。
def update(self): (省略) if not self._names[i].ns.isAlive():
この部分がORBの終了後に呼び出されるとエラーが表示される。
そのため、Managerのshutdown関数内でタイマを先に終了するように変更した。
def shutdown(self): self._rtcout.RTC_TRACE("Manager.shutdown()") self._listeners.manager_.preShutdown() self.shutdownTimer() self.shutdownComponents() self.shutdownNaming() self.shutdownORB() self.shutdownManager()
ただ、shutdownOnNoRtcs関数はタイマのスレッドで呼び出しているため、タイマのスレッドの終了待ちはできず、ネームサーバ確認、再登録処理が実行されてしまう。
そのため、shutdownOnNoRtcs関数では新たにスレッドを生成してshutdown関数を呼び出すように変更した。
def shutdownOnNoRtcs(self): (省略) if len(comps) == 0: self.shutdown_thread = threading.Thread(target=self.shutdown) self.shutdown_thread.start()
これでエラーは表示されなくなりました。
操作