Skip to content

Commit

Permalink
Service clients freeze on multi-client cases.
Browse files Browse the repository at this point in the history
  Ref: ros2/rmw#372

Signed-off-by: Tomoya Fujita <[email protected]>
  • Loading branch information
fujitatomoya committed Sep 4, 2024
1 parent 1598c6b commit e0e02a7
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 0 deletions.
2 changes: 2 additions & 0 deletions prover_rclpy/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@
'rclpy_bar_940 = src.rclpy_bar_940:main',
'ros2_1173 = src.ros2_1173:main',
'ros2_1517 = src.ros2_1517:main',
'rmw_372_client = src.rmw_372_client:main',
'rmw_372_server = src.rmw_372_server:main',
'rclpy_1030 = src.rclpy_1030:main',
'rclpy_1034 = src.rclpy_1034:main',
'rclpy_1039 = src.rclpy_1039:main',
Expand Down
34 changes: 34 additions & 0 deletions prover_rclpy/src/rmw_372_client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import rclpy
from rclpy.node import Node
from example_interfaces.srv import AddTwoInts

class MinimalClientAsync(Node):
def __init__(self):
super().__init__('minimal_client_async')
self.cli = self.create_client(AddTwoInts, 'add_two_ints')
while not self.cli.wait_for_service(timeout_sec=1.0):
self.get_logger().info('service not available, waiting again...')

def send_request(self, a, b):
self.req = AddTwoInts.Request()
self.req.a = a
self.req.b = b
self.future = self.cli.call_async(self.req)
rclpy.spin_until_future_complete(self, self.future)
return self.future.result()

def main(args=None):
rclpy.init(args=args)
minimal_client = MinimalClientAsync()
for i in range(1000000000):
response = minimal_client.send_request(1, 2)
if i%1000 == 0:
minimal_client.get_logger().info(
'Result of add_two_ints: for %d + %d = %d' %
(1, 2, response.sum))

minimal_client.destroy_node()
rclpy.shutdown()

if __name__ == '__main__':
main()
21 changes: 21 additions & 0 deletions prover_rclpy/src/rmw_372_server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import rclpy
from rclpy.node import Node
from example_interfaces.srv import AddTwoInts

class MinimalService(Node):
def __init__(self):
super().__init__('minimal_service')
self.srv = self.create_service(AddTwoInts, 'add_two_ints', self.add_two_ints_callback)

def add_two_ints_callback(self, request, response):
response.sum = request.a + request.b
return response

def main(args=None):
rclpy.init(args=args)
minimal_service = MinimalService()
rclpy.spin(minimal_service)
rclpy.shutdown()

if __name__ == '__main__':
main()

0 comments on commit e0e02a7

Please sign in to comment.