-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Memory leak in client when using python wrapper to send request to se…
…rvice ros2/rclpy#822 Signed-off-by: Tomoya Fujita <[email protected]>
- Loading branch information
1 parent
a91d264
commit d0963d5
Showing
12 changed files
with
159 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
cmake_minimum_required(VERSION 3.8) | ||
project(prover_interfaces) | ||
|
||
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") | ||
add_compile_options(-Wall -Wextra -Wpedantic) | ||
endif() | ||
|
||
# find dependencies | ||
find_package(ament_cmake REQUIRED) | ||
find_package(rosidl_default_generators REQUIRED) | ||
# uncomment the following section in order to fill in | ||
# further dependencies manually. | ||
# find_package(<dependency> REQUIRED) | ||
|
||
set(srv_files | ||
"srv/Huge.srv" | ||
) | ||
rosidl_generate_interfaces(${PROJECT_NAME} | ||
${srv_files} | ||
ADD_LINTER_TESTS | ||
) | ||
|
||
if(BUILD_TESTING) | ||
find_package(ament_lint_auto REQUIRED) | ||
# the following line skips the linter which checks for copyrights | ||
# uncomment the line when a copyright and license is not present in all source files | ||
#set(ament_cmake_copyright_FOUND TRUE) | ||
# the following line skips cpplint (only works in a git repo) | ||
# uncomment the line when this package is not in a git repo | ||
#set(ament_cmake_cpplint_FOUND TRUE) | ||
ament_lint_auto_find_test_dependencies() | ||
endif() | ||
|
||
ament_export_dependencies(rosidl_default_runtime) | ||
|
||
ament_package() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
<?xml version="1.0"?> | ||
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?> | ||
<package format="3"> | ||
<name>prover_interfaces</name> | ||
<version>0.0.0</version> | ||
<description>only applied to prover packages.</description> | ||
<maintainer email="[email protected]">Tomoya Fujita</maintainer> | ||
<license>Apache License 2.0</license> | ||
|
||
<author email="[email protected]">Tomoya Fujita</author> | ||
|
||
<buildtool_depend>ament_cmake</buildtool_depend> | ||
<buildtool_depend>rosidl_default_generators</buildtool_depend> | ||
|
||
<exec_depend>rosidl_default_runtime</exec_depend> | ||
|
||
<test_depend>ament_lint_auto</test_depend> | ||
<test_depend>ament_lint_common</test_depend> | ||
|
||
<member_of_group>rosidl_interface_packages</member_of_group> | ||
|
||
<export> | ||
<build_type>ament_cmake</build_type> | ||
</export> | ||
</package> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
byte[1048576] input_tensor | ||
--- | ||
byte[1048576] output_tensor |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
[develop] | ||
script-dir=$base/lib/prover_rclpy | ||
script_dir=$base/lib/prover_rclpy | ||
[install] | ||
install-scripts=$base/lib/prover_rclpy | ||
install_scripts=$base/lib/prover_rclpy |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
import sys | ||
|
||
from prover_interfaces.srv import Huge | ||
import rclpy | ||
from rclpy.node import Node | ||
|
||
import time | ||
|
||
|
||
class MinimalClientAsync(Node): | ||
|
||
def __init__(self): | ||
super().__init__('minimal_client_async') | ||
self.cli = self.create_client(Huge, 'huge') | ||
while not self.cli.wait_for_service(timeout_sec=5.0): | ||
self.get_logger().info('service not available, waiting again...') | ||
self.req = Huge.Request() | ||
|
||
def send_request(self): | ||
self.future = self.cli.call_async(self.req) | ||
|
||
|
||
def main(args=None): | ||
rclpy.init(args=args) | ||
|
||
minimal_client = MinimalClientAsync() | ||
for _ in range(1000): | ||
minimal_client.get_logger().info('Sending async request...') | ||
minimal_client.send_request() | ||
|
||
while rclpy.ok(): | ||
rclpy.spin_once(minimal_client) | ||
time.sleep(0.1) | ||
if minimal_client.future.done(): | ||
try: | ||
response = minimal_client.future.result() | ||
except Exception as e: | ||
minimal_client.get_logger().info( | ||
'Service call failed %r' % (e,)) | ||
else: | ||
minimal_client.get_logger().info('Result received!!!') | ||
break | ||
|
||
|
||
minimal_client.destroy_node() | ||
rclpy.shutdown() | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
import sys | ||
|
||
from prover_interfaces.srv import Huge | ||
import rclpy | ||
from rclpy.node import Node | ||
|
||
import time | ||
|
||
|
||
class MinimalServerAsync(Node): | ||
|
||
def __init__(self): | ||
super().__init__('minimal_server') | ||
self.cli = self.create_service(Huge, 'huge', self.callback) | ||
|
||
def callback(self, request, response): | ||
self.get_logger().info('Incoming request...') | ||
return response | ||
|
||
|
||
def main(args=None): | ||
rclpy.init(args=args) | ||
|
||
minimal_server = MinimalServerAsync() | ||
|
||
try: | ||
rclpy.spin(minimal_server) | ||
except KeyboardInterrupt: | ||
pass | ||
|
||
minimal_server.destroy_node() | ||
rclpy.shutdown() | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |