diff --git a/rosbridge_library/src/rosbridge_library/internal/services.py b/rosbridge_library/src/rosbridge_library/internal/services.py index b21034016..59a76da7d 100644 --- a/rosbridge_library/src/rosbridge_library/internal/services.py +++ b/rosbridge_library/src/rosbridge_library/internal/services.py @@ -125,6 +125,7 @@ def call_service( service_type = service_names_and_types.get(service) if service_type is None: raise InvalidServiceException(service) + # service_type is a tuple of types at this point; only one type is supported. if len(service_type) > 1: node_handle.get_logger().warning(f"More than one service type detected: {service_type}") @@ -139,7 +140,10 @@ def call_service( client = node_handle.create_client( service_class, service, callback_group=ReentrantCallbackGroup() ) - client.wait_for_service(server_timeout_time) + + if not client.wait_for_service(server_timeout_time): + node_handle.destroy_client(client) + raise InvalidServiceException(service) future = client.call_async(inst) while rclpy.ok() and not future.done(): diff --git a/rosbridge_library/test/capabilities/test_service_capabilities.py b/rosbridge_library/test/capabilities/test_service_capabilities.py index 9d3b06be4..6e967613e 100755 --- a/rosbridge_library/test/capabilities/test_service_capabilities.py +++ b/rosbridge_library/test/capabilities/test_service_capabilities.py @@ -116,7 +116,7 @@ def test_call_advertised_service(self): loop_iterations = 0 while self.received_message is None: rclpy.spin_once(self.node, timeout_sec=0.1) - time.sleep(0.5) + time.sleep(0.1) loop_iterations += 1 if loop_iterations > 3: self.fail("Timed out waiting for service call message.")