diff --git a/pygazebo/pygazebo.py b/pygazebo/pygazebo.py index 8e1f12c..d01e676 100755 --- a/pygazebo/pygazebo.py +++ b/pygazebo/pygazebo.py @@ -90,7 +90,7 @@ def remove(self): class WriteFuture(asyncio.Future): def __init__(self, publisher, connections): - super(Publisher.WriteFuture, self).__init__(self) + super(Publisher.WriteFuture, self).__init__() self.publisher = publisher self.connections = dict((x, True) for x in connections) @@ -102,7 +102,8 @@ def handle_done(self, future, connection): try: future.result() - except: + except Exception as e: + logger.debug('write error, closing connection:', str(e)) if connection in self.publisher._listeners: self.publisher._listeners.remove(connection) @@ -117,7 +118,8 @@ def _publish_impl(self, message): for connection in self._listeners: future = connection.write(message) future.add_done_callback( - lambda future: result.handle_done(future, connection)) + lambda future, connection=connection: result.handle_done( + future, connection)) return result diff --git a/tests/test_pygazebo.py b/tests/test_pygazebo.py index cf6f26b..b04e361 100755 --- a/tests/test_pygazebo.py +++ b/tests/test_pygazebo.py @@ -406,12 +406,14 @@ def test_send(self, manager): sample_message = gz_string_pb2.GzString() sample_message.data = 'testdata' - publisher.publish(sample_message) + publish_future = publisher.publish(sample_message) loop.run_until_complete(read_data1) data_frame = read_data1.result() assert data_frame == sample_message.SerializeToString() + assert loop.run_until_complete(publish_future) is None + # Test sending a very large message, it should require no # individual writes which are too large. read_data2 = asyncio.Future()