OpenRTM / OpenRTM-aist-Python

OpenRTM-aist: RT-Middleware and OMG RTC implementation in Python implemented by AIST
Other
2 stars 7 forks source link

ROSTransportでSubscriber側のRTCが異常終了すると、Publisher側のRTCがエラー状態になる問題 #304

Closed Nobu19800 closed 10 months ago

Nobu19800 commented 1 year ago

Identify the Bug

ConsoleInとConsoleOutを起動して、ROSTransportで接続する。 ConsoleOutをkillコマンドで終了させた後、ConsoleInでデータを送信しようとすると、ConsoleInがエラー状態になる。

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/OpenRTM_aist/DataFlowComponentBase.py", line 123, in on_execute
    ret = self.onExecute(ec_id)
  File "/usr/local/share/openrtm-2.0/components/python3/SimpleIO/ConsoleIn.py", line 101, in onExecute
    self._outport.write()
  File "/usr/local/lib/python3.8/dist-packages/OpenRTM_aist/OutPort.py", line 195, in write
    ret = con.write(value)
  File "/usr/local/lib/python3.8/dist-packages/OpenRTM_aist/OutPortPushConnector.py", line 283, in write
    return self._publisher.write(cdr_data, -1, 0)
  File "/usr/local/lib/python3.8/dist-packages/OpenRTM_aist/PublisherFlush.py", line 288, in write
    self._retcode = self._consumer.put(data)
  File "/home/n-miyamoto2/rtcrostest/./ext/ROSTransport/ROSOutPort.py", line 324, in put
    self._topicmgr.removeSubscriberLink(connector.getConnection())
  File "/home/n-miyamoto2/rtcrostest/./ext/ROSTransport/ROSTopicManager.py", line 835, in removeSubscriberLink
    con.exit()
  File "/home/n-miyamoto2/rtcrostest/./ext/ROSTransport/ROSTopicManager.py", line 1336, in exit
    self._conn.shutdown(socket.SHUT_RDWR)
OSError: [Errno 107] Transport endpoint is not connected

Description of the Change

ROSTransportで例外が発生する箇所について、ROSTransportの中で例外処理するように修正した。

Verification