Skip to content

lock order inversion between GraphListener and Context in action clients #2946

@skyegalaxy

Description

@skyegalaxy

Generated by Generative AI

No

Operating System:

Linux ddccc47a01b6 6.8.0-79-generic #79-Ubuntu SMP PREEMPT_DYNAMIC Tue Aug 12 14:42:46 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

ROS version or commit hash:

iron, jazzy, rolling

RMW implementation (if applicable):

rmw_fastrtps_cpp

RMW Configuration (if applicable):

No response

Client library (if applicable):

rclcpp

'ros2 doctor --report' output

ros2 doctor --report
   NETWORK CONFIGURATION
inet         : 127.0.0.1
inet4        : ['127.0.0.1']
inet6        : ['::1']
netmask      : 255.0.0.0
device       : lo
flags        : 73<LOOPBACK,RUNNING,UP>
mtu          : 65536
inet         : 172.17.0.4
inet4        : ['172.17.0.4']
ether        : a2:cb:a5:a8:c9:9a
netmask      : 255.255.0.0
device       : eth0
flags        : 4163<RUNNING,BROADCAST,UP,MULTICAST>
mtu          : 1500
broadcast    : 172.17.255.255

   PACKAGE VERSIONS
rosidl_default_runtime                    : latest=1.6.0, local=1.6.0
builtin_interfaces                        : latest=2.0.3, local=2.0.2
rmw                                       : latest=7.3.2, local=7.3.2
rcl_logging_spdlog                        : latest=3.1.1, local=3.1.1
unique_identifier_msgs                    : latest=2.5.0, local=2.5.0
stereo_msgs                               : latest=5.3.6, local=5.3.6
type_description_interfaces               : latest=2.0.3, local=2.0.2
launch_xml                                : latest=3.4.6, local=3.4.4
ros2doctor                                : latest=0.32.5, local=0.32.4
uncrustify_vendor                         : latest=3.0.1, local=3.0.1
rosidl_parser                             : latest=4.6.6, local=4.6.5
ament_cppcheck                            : latest=0.17.3, local=0.17.2
rosidl_adapter                            : latest=4.6.6, local=4.6.5
rosgraph_msgs                             : latest=2.0.3, local=2.0.2
launch                                    : latest=3.4.6, local=3.4.4
rosidl_dynamic_typesupport_fastrtps       : latest=0.1.0, local=0.1.0
rmw_fastrtps_cpp                          : latest=8.4.3, local=8.4.2
nav_msgs                                  : latest=5.3.6, local=5.3.6
ros_workspace                             : latest=1.0.3, local=1.0.3
ament_cmake_copyright                     : latest=0.17.3, local=0.17.2
rmw_fastrtps_shared_cpp                   : latest=8.4.3, local=8.4.2
rosidl_typesupport_c                      : latest=3.2.2, local=3.2.2
ros2node                                  : latest=0.32.5, local=0.32.4
ament_cmake_export_include_directories    : latest=2.5.4, local=2.5.4
geometry_msgs                             : latest=5.3.6, local=5.3.6
rcl_interfaces                            : latest=2.0.3, local=2.0.2
ros2param                                 : latest=0.32.5, local=0.32.4
rclcpp_lifecycle                          : latest=28.1.11, local=28.1.9
rosidl_cli                                : latest=4.6.6, local=4.6.5
rpyutils                                  : latest=0.4.1, local=0.4.1
ros2launch                                : latest=0.26.8, local=0.26.7
ros_core                                  : latest=0.11.0, local=0.11.0
statistics_msgs                           : latest=2.0.3, local=2.0.2
ros2run                                   : latest=0.32.5, local=0.32.4
trajectory_msgs                           : latest=5.3.6, local=5.3.6
ament_cmake                               : latest=2.5.4, local=2.5.4
visualization_msgs                        : latest=5.3.6, local=5.3.6
libyaml_vendor                            : latest=1.6.3, local=1.6.3
ament_cmake_lint_cmake                    : latest=0.17.3, local=0.17.2
rosidl_typesupport_fastrtps_c             : latest=3.6.2, local=3.6.1
rcutils                                   : latest=6.7.4, local=6.7.2
rosidl_core_generators                    : latest=0.2.0, local=0.2.0
ros2topic                                 : latest=0.32.5, local=0.32.4
ament_cmake_include_directories           : latest=2.5.4, local=2.5.4
ament_cmake_export_targets                : latest=2.5.4, local=2.5.4
std_msgs                                  : latest=5.3.6, local=5.3.6
ament_index_python                        : latest=1.8.1, local=1.8.1
ament_copyright                           : latest=0.17.3, local=0.17.2
ament_xmllint                             : latest=0.17.3, local=0.17.2
ament_lint_common                         : latest=0.17.3, local=0.17.2
ament_cmake_version                       : latest=2.5.4, local=2.5.4
rcl_lifecycle                             : latest=9.2.7, local=9.2.6
pluginlib                                 : latest=5.4.2, local=5.4.2
ament_pep257                              : latest=0.17.3, local=0.17.2
rosidl_default_generators                 : latest=1.6.0, local=1.6.0
rmw_dds_common                            : latest=3.1.0, local=3.1.0
ros_environment                           : latest=4.2.1, local=4.2.1
ament_package                             : latest=0.16.4, local=0.16.4
ament_cmake_gtest                         : latest=2.5.4, local=2.5.4
shape_msgs                                : latest=5.3.6, local=5.3.6
ament_cmake_gmock                         : latest=2.5.4, local=2.5.4
ros2interface                             : latest=0.32.5, local=0.32.4
libstatistics_collector                   : latest=1.7.4, local=1.7.4
rosidl_generator_c                        : latest=4.6.6, local=4.6.5
console_bridge_vendor                     : latest=1.7.1, local=1.7.1
fastrtps_cmake_module                     : latest=3.6.2, local=3.6.1
rmw_implementation_cmake                  : latest=7.3.2, local=7.3.2
rosidl_runtime_py                         : latest=0.13.1, local=0.13.1
ament_cmake_pytest                        : latest=2.5.4, local=2.5.4
rosidl_typesupport_introspection_cpp      : latest=4.6.6, local=4.6.5
launch_testing                            : latest=3.4.6, local=3.4.4
ament_cmake_uncrustify                    : latest=0.17.3, local=0.17.2
class_loader                              : latest=2.7.0, local=2.7.0
ament_cmake_auto                          : latest=2.5.4, local=2.5.4
rmw_implementation                        : latest=2.15.6, local=2.15.5
common_interfaces                         : latest=5.3.6, local=5.3.6
launch_ros                                : latest=0.26.8, local=0.26.7
sensor_msgs                               : latest=5.3.6, local=5.3.6
diagnostic_msgs                           : latest=5.3.6, local=5.3.6
rosidl_typesupport_interface              : latest=4.6.6, local=4.6.5
launch_testing_ros                        : latest=0.26.8, local=0.26.7
ament_cmake_export_libraries              : latest=2.5.4, local=2.5.4
ament_cpplint                             : latest=0.17.3, local=0.17.2
actionlib_msgs                            : latest=5.3.6, local=5.3.6
ament_lint_cmake                          : latest=0.17.3, local=0.17.2
rosidl_runtime_cpp                        : latest=4.6.6, local=4.6.5
rcl_action                                : latest=9.2.7, local=9.2.6
rosidl_dynamic_typesupport                : latest=0.1.2, local=0.1.2
lifecycle_msgs                            : latest=2.0.3, local=2.0.2
launch_yaml                               : latest=3.4.6, local=3.4.4
rosidl_core_runtime                       : latest=0.2.0, local=0.2.0
rclcpp_action                             : latest=28.1.11, local=28.1.9
rosidl_cmake                              : latest=4.6.6, local=4.6.5
rclcpp_components                         : latest=28.1.11, local=28.1.9
ament_uncrustify                          : latest=0.17.3, local=0.17.2
ament_cmake_python                        : latest=2.5.4, local=2.5.4
ros2service                               : latest=0.32.5, local=0.32.4
rosidl_typesupport_introspection_c        : latest=4.6.6, local=4.6.5
ament_cmake_core                          : latest=2.5.4, local=2.5.4
ament_cmake_export_definitions            : latest=2.5.4, local=2.5.4
spdlog_vendor                             : latest=1.6.1, local=1.6.1
rclpy                                     : latest=7.1.5, local=7.1.4
ament_cmake_pep257                        : latest=0.17.3, local=0.17.2
sros2_cmake                               : latest=0.13.4, local=0.13.3
rcpputils                                 : latest=2.11.2, local=2.11.2
rosidl_generator_cpp                      : latest=4.6.6, local=4.6.5
ament_lint_auto                           : latest=0.17.3, local=0.17.2
launch_testing_ament_cmake                : latest=3.4.6, local=3.4.4
osrf_pycommon                             : latest=2.1.7, local=2.1.6
rcl                                       : latest=9.2.7, local=9.2.6
tinyxml2_vendor                           : latest=0.9.1, local=0.9.1
std_srvs                                  : latest=5.3.6, local=5.3.6
ros2cli_common_extensions                 : latest=0.3.0, local=0.3.0
ament_cmake_export_link_flags             : latest=2.5.4, local=2.5.4
domain_coordinator                        : latest=0.12.0, local=0.12.0
ament_cmake_export_interfaces             : latest=2.5.4, local=2.5.4
rosidl_typesupport_cpp                    : latest=3.2.2, local=3.2.2
rosidl_generator_type_description         : latest=4.6.6, local=4.6.5
ros2action                                : latest=0.32.5, local=0.32.4
ament_cmake_cppcheck                      : latest=0.17.3, local=0.17.2
sros2                                     : latest=0.13.4, local=0.13.3
ament_lint                                : latest=0.17.3, local=0.17.2
ament_cmake_cpplint                       : latest=0.17.3, local=0.17.2
ament_cmake_gen_version_h                 : latest=2.5.4, local=2.5.4
ament_cmake_ros                           : latest=0.12.0, local=0.12.0
ament_cmake_flake8                        : latest=0.17.3, local=0.17.2
service_msgs                              : latest=2.0.3, local=2.0.2
ament_flake8                              : latest=0.17.3, local=0.17.2
rosidl_typesupport_fastrtps_cpp           : latest=3.6.2, local=3.6.1
ros2pkg                                   : latest=0.32.5, local=0.32.4
ament_cmake_test                          : latest=2.5.4, local=2.5.4
ament_cmake_target_dependencies           : latest=2.5.4, local=2.5.4
python_cmake_module                       : latest=0.11.1, local=0.11.1
rosidl_pycommon                           : latest=4.6.6, local=4.6.5
ament_cmake_libraries                     : latest=2.5.4, local=2.5.4
ros2lifecycle                             : latest=0.32.5, local=0.32.4
rclcpp                                    : latest=28.1.11, local=28.1.9
tracetools                                : latest=8.2.4, local=8.2.3
rosidl_generator_py                       : latest=0.22.1, local=0.22.1
ros2cli                                   : latest=0.32.5, local=0.32.4
rcl_logging_interface                     : latest=3.1.1, local=3.1.1
rosidl_runtime_c                          : latest=4.6.6, local=4.6.5
ament_cmake_export_dependencies           : latest=2.5.4, local=2.5.4
rcl_yaml_param_parser                     : latest=9.2.7, local=9.2.6
ros2multicast                             : latest=0.32.5, local=0.32.4
composition_interfaces                    : latest=2.0.3, local=2.0.2
action_msgs                               : latest=2.0.3, local=2.0.2
ament_index_cpp                           : latest=1.8.1, local=1.8.1
ros2component                             : latest=0.32.5, local=0.32.4
ament_cmake_xmllint                       : latest=0.17.3, local=0.17.2
nav_2d_utils                              : latest=1.3.8, local=1.3.6
nav2_velocity_smoother                    : latest=1.3.8, local=1.3.6
opennav_docking                           : latest=1.3.8, local=1.3.6
nav2_core                                 : latest=1.3.8, local=1.3.6
nav2_smac_planner                         : latest=1.3.8, local=1.3.6
nav2_dwb_controller                       : latest=1.3.8, local=1.3.6
dwb_core                                  : latest=1.3.8, local=1.3.6
nav2_graceful_controller                  : latest=1.3.8, local=1.3.6
nav2_mppi_controller                      : latest=1.3.8, local=1.3.6
nav2_rviz_plugins                         : latest=1.3.8, local=1.3.6
nav2_voxel_grid                           : latest=1.3.8, local=1.3.6
nav2_behaviors                            : latest=1.3.8, local=1.3.6
opennav_docking_bt                        : latest=1.3.8, local=1.3.6
nav2_waypoint_follower                    : latest=1.3.8, local=1.3.6
nav2_navfn_planner                        : latest=1.3.8, local=1.3.6
nav2_collision_monitor                    : latest=1.3.8, local=1.3.6
nav2_amcl                                 : latest=1.3.8, local=1.3.6
dwb_plugins                               : latest=1.3.8, local=1.3.6
nav2_regulated_pure_pursuit_controller    : latest=1.3.8, local=1.3.6
bondcpp                                   : latest=4.1.2, local=4.1.2
dwb_critics                               : latest=1.3.8, local=1.3.6
robot_localization                        : latest=3.8.3, local=3.8.2
nav2_lifecycle_manager                    : latest=1.3.8, local=1.3.6
nav2_costmap_2d                           : latest=1.3.8, local=1.3.6
nav2_bt_navigator                         : latest=1.3.8, local=1.3.6
nav_2d_msgs                               : latest=1.3.8, local=1.3.6
nav2_simple_commander                     : latest=1.3.8, local=1.3.6
dwb_msgs                                  : latest=1.3.8, local=1.3.6
geographic_msgs                           : latest=1.0.6, local=1.0.6
nav2_theta_star_planner                   : latest=1.3.8, local=1.3.6
nav2_planner                              : latest=1.3.8, local=1.3.6
smclib                                    : latest=4.1.2, local=4.1.2
nav2_constrained_smoother                 : latest=1.3.8, local=1.3.6
nav2_controller                           : latest=1.3.8, local=1.3.6
nav2_smoother                             : latest=1.3.8, local=1.3.6
navigation2                               : latest=1.3.8, local=1.3.6
nav2_util                                 : latest=1.3.8, local=1.3.6
costmap_queue                             : latest=1.3.8, local=1.3.6
bond                                      : latest=4.1.2, local=4.1.2
opennav_docking_core                      : latest=1.3.8, local=1.3.6
nav2_map_server                           : latest=1.3.8, local=1.3.6
nav2_rotation_shim_controller             : latest=1.3.8, local=1.3.6
nav2_behavior_tree                        : latest=1.3.8, local=1.3.6
nav2_common                               : latest=1.3.8, local=1.3.6
nav2_msgs                                 : latest=1.3.8, local=1.3.6
behaviortree_cpp                          : latest=4.7.1, local=4.7.1
ompl                                      : latest=1.7.0, local=1.7.0
rmw_cyclonedds_cpp                        : latest=2.2.3, local=2.2.3
qt_gui_app                                : latest=2.7.5, local=2.7.5
rqt                                       : latest=1.6.0, local=1.6.0
rqt_joint_trajectory_controller           : latest=4.31.0, local=4.25.0
ros2_control_test_assets                  : latest=4.36.0, local=4.29.0
tcb_span                                  : latest=1.0.2, local=1.0.2
diagnostic_updater                        : latest=4.2.6, local=4.2.4
pal_statistics_msgs                       : latest=2.6.4, local=2.6.2
rqt_dotgraph                              : latest=0.0.4, local=0.0.4
rqt_robot_steering                        : latest=2.0.0, local=1.0.1
controller_manager_msgs                   : latest=4.36.0, local=4.29.0
gz_tools_vendor                           : latest=0.0.7, local=0.0.6
rqt_gauges                                : latest=0.0.3, local=0.0.3
tl_expected                               : latest=1.0.2, local=1.0.2
qt_gui_core                               : latest=2.7.5, local=2.7.5
generate_parameter_library_py             : latest=0.5.0, local=0.4.0
rqt_robot_dashboard                       : latest=0.6.1, local=0.6.1
controller_interface                      : latest=4.36.0, local=4.29.0
generate_parameter_library                : latest=0.5.0, local=0.4.0
realtime_tools                            : latest=3.7.0, local=3.5.1
sdformat_vendor                           : latest=0.0.10, local=0.0.9
rqt_robot_monitor                         : latest=1.0.6, local=1.0.6
rqt_moveit                                : latest=1.0.1, local=1.0.1
rqt_image_overlay_layer                   : latest=0.4.0, local=0.4.0
sdformat_urdf                             : latest=1.0.2, local=1.0.2
joint_limits                              : latest=4.36.0, local=4.29.0
parameter_traits                          : latest=0.5.0, local=0.4.0
hardware_interface                        : latest=4.36.0, local=4.29.0
ros_image_to_qimage                       : latest=0.4.1, local=0.4.1
rqt_image_overlay                         : latest=0.4.0, local=0.4.0
rqt_controller_manager                    : latest=4.36.0, local=4.29.0
pal_statistics                            : latest=2.6.4, local=2.6.2
control_msgs                              : latest=5.5.0, local=5.4.0
rqt_runtime_monitor                       : latest=1.0.0, local=1.0.0
rqt_tf_tree                               : latest=1.0.5, local=1.0.5
controller_manager                        : latest=4.36.0, local=4.29.0
rviz_visual_testing_framework             : latest=14.1.14, local=14.1.11
action_tutorials_py                       : latest=0.33.6, local=0.33.5
python_qt_binding                         : latest=2.2.1, local=2.2.1
action_tutorials_interfaces               : latest=0.33.6, local=0.33.5
quality_of_service_demo_py                : latest=0.33.6, local=0.33.5
examples_rclpy_minimal_subscriber         : latest=0.19.6, local=0.19.5
rqt_common_plugins                        : latest=1.2.0, local=1.2.0
gz_math_vendor                            : latest=0.0.8, local=0.0.8
demo_nodes_cpp_native                     : latest=0.33.6, local=0.33.5
tango_icons_vendor                        : latest=0.3.0, local=0.3.0
rqt_publisher                             : latest=1.7.2, local=1.7.2
examples_rclpy_minimal_action_server      : latest=0.19.6, local=0.19.5
turtlesim                                 : latest=1.8.3, local=1.8.3
intra_process_demo                        : latest=0.33.6, local=0.33.5
action_tutorials_cpp                      : latest=0.33.6, local=0.33.5
pendulum_msgs                             : latest=0.33.6, local=0.33.5
interactive_markers                       : latest=2.5.4, local=2.5.4
angles                                    : latest=1.16.0, local=1.16.0
teleop_twist_keyboard                     : latest=2.4.0, local=2.4.0
examples_rclcpp_minimal_publisher         : latest=0.19.6, local=0.19.5
teleop_twist_joy                          : latest=2.6.5, local=2.6.3
pcl_conversions                           : latest=2.6.2, local=2.6.2
examples_rclcpp_minimal_action_server     : latest=0.19.6, local=0.19.5
examples_rclcpp_minimal_action_client     : latest=0.19.6, local=0.19.5
examples_rclpy_minimal_service            : latest=0.19.6, local=0.19.5
joy                                       : latest=3.3.0, local=3.3.0
examples_rclcpp_minimal_subscriber        : latest=0.19.6, local=0.19.5
image_transport                           : latest=5.1.7, local=5.1.6
logging_demo                              : latest=0.33.6, local=0.33.5
rqt_bag_plugins                           : latest=1.5.5, local=1.5.4
cv_bridge                                 : latest=4.1.0, local=4.1.0
rqt_gui_cpp                               : latest=1.6.0, local=1.6.0
rqt_console                               : latest=2.2.1, local=2.2.1
rqt_graph                                 : latest=1.5.5, local=1.5.4
rqt_gui_py                                : latest=1.6.0, local=1.6.0
examples_rclpy_executors                  : latest=0.19.6, local=0.19.5
examples_rclpy_minimal_client             : latest=0.19.6, local=0.19.5
rqt_msg                                   : latest=1.5.1, local=1.5.1
qt_gui_py_common                          : latest=2.7.5, local=2.7.5
demo_nodes_py                             : latest=0.33.6, local=0.33.5
point_cloud_transport                     : latest=4.0.4, local=4.0.4
rqt_action                                : latest=2.2.0, local=2.2.0
map_msgs                                  : latest=2.4.1, local=2.4.1
resource_retriever                        : latest=3.4.4, local=3.4.4
rqt_service_caller                        : latest=1.2.1, local=1.2.1
gz_utils_vendor                           : latest=0.0.5, local=0.0.5
depthimage_to_laserscan                   : latest=2.5.1, local=2.5.1
rttest                                    : latest=0.17.1, local=0.17.1
rqt_reconfigure                           : latest=1.6.2, local=1.6.2
composition                               : latest=0.33.6, local=0.33.5
rviz_rendering                            : latest=14.1.14, local=14.1.11
example_interfaces                        : latest=0.12.0, local=0.12.0
examples_rclcpp_minimal_composition       : latest=0.19.6, local=0.19.5
rqt_image_view                            : latest=1.3.0, local=1.3.0
rqt_shell                                 : latest=1.2.2, local=1.2.2
examples_rclcpp_minimal_client            : latest=0.19.6, local=0.19.5
image_tools                               : latest=0.33.6, local=0.33.5
qt_gui                                    : latest=2.7.5, local=2.7.5
rqt_topic                                 : latest=1.7.3, local=1.7.3
lifecycle                                 : latest=0.33.6, local=0.33.5
examples_rclcpp_multithreaded_executor    : latest=0.19.6, local=0.19.5
image_geometry                            : latest=4.1.0, local=4.1.0
libcurl_vendor                            : latest=3.4.4, local=3.4.4
rviz_ogre_vendor                          : latest=14.1.14, local=14.1.11
pcl_msgs                                  : latest=1.0.0, local=1.0.0
rqt_gui                                   : latest=1.6.0, local=1.6.0
examples_rclcpp_minimal_timer             : latest=0.19.6, local=0.19.5
pendulum_control                          : latest=0.33.6, local=0.33.5
topic_monitor                             : latest=0.33.6, local=0.33.5
examples_rclcpp_minimal_service           : latest=0.19.6, local=0.19.5
rqt_srv                                   : latest=1.2.2, local=1.2.2
rqt_plot                                  : latest=1.4.4, local=1.4.3
dummy_map_server                          : latest=0.33.6, local=0.33.5
gz_cmake_vendor                           : latest=0.0.10, local=0.0.9
demo_nodes_cpp                            : latest=0.33.6, local=0.33.5
laser_geometry                            : latest=2.7.1, local=2.7.0
qt_dotgraph                               : latest=2.7.5, local=2.7.5
dummy_robot_bringup                       : latest=0.33.6, local=0.33.5
rqt_bag                                   : latest=1.5.5, local=1.5.4
examples_rclpy_minimal_publisher          : latest=0.19.6, local=0.19.5
desktop                                   : latest=0.11.0, local=0.11.0
rviz_common                               : latest=14.1.14, local=14.1.11
quality_of_service_demo_cpp               : latest=0.33.6, local=0.33.5
tlsf                                      : latest=0.9.0, local=0.9.0
qt_gui_cpp                                : latest=2.7.5, local=2.7.5
rviz2                                     : latest=14.1.14, local=14.1.11
dummy_sensors                             : latest=0.33.6, local=0.33.5
rqt_py_console                            : latest=1.2.2, local=1.2.2
sdl2_vendor                               : latest=3.3.0, local=3.3.0
rviz_default_plugins                      : latest=14.1.14, local=14.1.11
tlsf_cpp                                  : latest=0.17.1, local=0.17.1
examples_rclpy_minimal_action_client      : latest=0.19.6, local=0.19.5
rviz_assimp_vendor                        : latest=14.1.14, local=14.1.11
rqt_py_common                             : latest=1.6.0, local=1.6.0
rosbag2_interfaces                        : latest=0.26.9, local=0.26.7
tf2_sensor_msgs                           : latest=0.36.14, local=0.36.11
rosbag2_transport                         : latest=0.26.9, local=0.26.7
tf2_eigen_kdl                             : latest=0.36.14, local=0.36.11
tf2_py                                    : latest=0.36.14, local=0.36.11
rosbag2_storage_mcap                      : latest=0.26.9, local=0.26.7
rosbag2_compression_zstd                  : latest=0.26.9, local=0.26.7
urdf_parser_plugin                        : latest=2.10.0, local=2.10.0
tf2_ros_py                                : latest=0.36.14, local=0.36.11
rosbag2_compression                       : latest=0.26.9, local=0.26.7
geometry2                                 : latest=0.36.14, local=0.36.11
pybind11_vendor                           : latest=3.1.3, local=3.1.3
robot_state_publisher                     : latest=3.3.3, local=3.3.3
ros2bag                                   : latest=0.26.9, local=0.26.7
ros_base                                  : latest=0.11.0, local=0.11.0
eigen3_cmake_module                       : latest=0.3.0, local=0.3.0
rosbag2                                   : latest=0.26.9, local=0.26.7
zstd_vendor                               : latest=0.26.9, local=0.26.7
message_filters                           : latest=4.11.7, local=4.11.6
tf2                                       : latest=0.36.14, local=0.36.11
kdl_parser                                : latest=2.11.0, local=2.11.0
rosbag2_cpp                               : latest=0.26.9, local=0.26.7
liblz4_vendor                             : latest=0.26.9, local=0.26.7
tf2_ros                                   : latest=0.36.14, local=0.36.11
tf2_kdl                                   : latest=0.36.14, local=0.36.11
python_orocos_kdl_vendor                  : latest=0.5.1, local=0.5.1
tf2_msgs                                  : latest=0.36.14, local=0.36.11
rosbag2_storage                           : latest=0.26.9, local=0.26.7
urdf                                      : latest=2.10.0, local=2.10.0
rosbag2_storage_default_plugins           : latest=0.26.9, local=0.26.7
tf2_tools                                 : latest=0.36.14, local=0.36.11
tf2_geometry_msgs                         : latest=0.36.14, local=0.36.11
tf2_bullet                                : latest=0.36.14, local=0.36.11
sensor_msgs_py                            : latest=5.3.6, local=5.3.6
tf2_eigen                                 : latest=0.36.14, local=0.36.11
rosbag2_storage_sqlite3                   : latest=0.26.9, local=0.26.7
mcap_vendor                               : latest=0.26.9, local=0.26.7
yaml_cpp_vendor                           : latest=9.0.1, local=9.0.1
sqlite3_vendor                            : latest=0.26.9, local=0.26.7
keyboard_handler                          : latest=0.3.1, local=0.3.1
rosbag2_py                                : latest=0.26.9, local=0.26.7
orocos_kdl_vendor                         : latest=0.5.1, local=0.5.1

   PLATFORM INFORMATION
system           : Linux
platform info    : Linux-6.8.0-79-generic-x86_64-with-glibc2.39
release          : 6.8.0-79-generic
processor        : x86_64

   QOS COMPATIBILITY LIST
compatibility status    : No publisher/subscriber pairs found

   RMW MIDDLEWARE
middleware name    : rmw_fastrtps_cpp

   ROS 2 INFORMATION
distribution name      : jazzy
distribution type      : ros2
distribution status    : active
release platforms      : {'debian': ['bookworm'], 'rhel': ['9'], 'ubuntu': ['noble']}

   TOPIC LIST
topic               : none
publisher count     : 0
subscriber count    : 0

Steps to reproduce issue

  1. Clone this minimal example. (A generalized excerpt from https://github.com/irobot-ros/rclcpp/blob/irobot/jazzy/rclcpp_action/test/test_actions.hpp)
  2. Build it with colcon build --mixin tsan (make sure default colcon mixins are installed)
  3. On your host, run sudo sysctl vm.mmap_rnd_bits=30
  4. Run the executable via TSAN_OPTIONS="second_deadlock_stack=1" ./build/lock_order_inversion/lock_order_inv
  5. tsan will give the following error for lock order inversion (Among one other data race issue)
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=375)
  Cycle in lock order graph: M0 (0x724c00002c08) => M1 (0x7254000003d0) => M0

  Mutex M1 acquired here while holding mutex M0 in thread T16:
    #0 pthread_mutex_lock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1341 (libtsan.so.2+0x59a13) (BuildId: 38097064631f7912bd33117a9c83d08b42e15571)
    #1 rclcpp::Context::add_on_shutdown_callback(std::function<void ()>) <null> (librclcpp.so+0xf46a8) (BuildId: 6314972b7a8b33e0e7147aa214d60c6e7ad29be2)
    #2 <null> <null> (libstdc++.so.6+0xecdb3) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1)

  Mutex M0 previously acquired by the same thread here:
    #0 pthread_mutex_lock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1341 (libtsan.so.2+0x59a13) (BuildId: 38097064631f7912bd33117a9c83d08b42e15571)
    #1 rclcpp::graph_listener::GraphListener::start_if_not_started() <null> (librclcpp.so+0x128e35) (BuildId: 6314972b7a8b33e0e7147aa214d60c6e7ad29be2)
    #2 <null> <null> (libstdc++.so.6+0xecdb3) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1)

  Mutex M0 acquired here while holding mutex M1 in main thread:
    #0 pthread_mutex_lock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1341 (libtsan.so.2+0x59a13) (BuildId: 38097064631f7912bd33117a9c83d08b42e15571)
    #1 rclcpp::graph_listener::GraphListener::__shutdown() <null> (librclcpp.so+0x129e29) (BuildId: 6314972b7a8b33e0e7147aa214d60c6e7ad29be2)
    #2 rclcpp::contexts::get_global_default_context() <null> (librclcpp.so+0x1022ad) (BuildId: 6314972b7a8b33e0e7147aa214d60c6e7ad29be2)

  Mutex M1 previously acquired by the same thread here:
    #0 pthread_mutex_lock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1341 (libtsan.so.2+0x59a13) (BuildId: 38097064631f7912bd33117a9c83d08b42e15571)
    #1 <null> <null> (librclcpp.so+0xf1c9c) (BuildId: 6314972b7a8b33e0e7147aa214d60c6e7ad29be2)
    #2 rclcpp::contexts::get_global_default_context() <null> (librclcpp.so+0x1022ad) (BuildId: 6314972b7a8b33e0e7147aa214d60c6e7ad29be2)

  Thread T16 (tid=392, finished) created by main thread at:
    #0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1022 (libtsan.so.2+0x5ac1a) (BuildId: 38097064631f7912bd33117a9c83d08b42e15571)
    #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0xeceb0) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1)
    #2 __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 (libc.so.6+0x2a1c9) (BuildId: 42c84c92e6f98126b3e2230ebfdead22c235b667)

SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/opt/ros/jazzy/lib/librclcpp.so+0xf46a8) (BuildId: 6314972b7a8b33e0e7147aa214d60c6e7ad29be2) in rclcpp::Context::add_on_shutdown_callback(std::function<void ()>)
==================

Expected behavior

Mutexes are supposed to lock in a consistent order to prevent deadlocks.

Actual behavior

TSan reports lock order inversion between mutexes in GraphListener and Context

Additional information

In the code, we create an action client, which triggers GraphListener::start_if_not_started() (acquiring M0, then M1)
Later during shutdown, Context::shutdown() is called (acquiring M1, then M0)
This results in a classic lock-order inversion that ThreadSanitizer detects as a potential deadlock.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions