Skip to content

Backport #2953 to jazzy — crash reproducible on Jazzy with duplicate goal UUID #3120

Open

Description

@Smit-tay

Generated by Generative AI

No response

Operating System:

Host: Linux 6.19.8-200.fc43.x86_64 - - Podman: PRETTY_NAME="Ubuntu 24.04.4 LTS" NAME="Ubuntu" VERSION_ID="24.04" VERSION="24.04.4 LTS (Noble Numbat)" VERSION_CODENAME=noble ID=ubuntu ID_LIKE=debian UBUNTU_CODENAME=noble

ROS version or commit hash:

jazzy

RMW implementation (if applicable):

No response

RMW Configuration (if applicable):

No response

Client library (if applicable):

rclcpp_action

'ros2 doctor --report' output

ros2 doctor --report
<COPY OUTPUT HERE>

Steps to reproduce issue

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<RUNNING,UP,LOOPBACK>
mtu : 65536
inet : 192.168.179.25
inet4 : ['192.168.179.25']
ether : a0:ce:c8:8b:cd:86
inet6 : ['2001:a61:112d:cb01:a2ce:c8ff:fe8b:cd86', 'fdf7:82f:47de:0:6257:c635:80b3:ec2c', '2001:a61:112d:cb01:6257:c635:80b3:ec2c', 'fe80::a2ce:c8ff:fe8b:cd86%enp0s20u2c2']
netmask : 255.255.255.0
device : enp0s20u2c2
flags : 4163<BROADCAST,RUNNING,UP,MULTICAST>
mtu : 1500
broadcast : 192.168.179.255
inet : 10.88.0.1
inet4 : ['10.88.0.1']
ether : 9e:3d:ce:61:f4:7c
inet6 : ['fe80::9c3d:ceff:fe61:f47c%podman0']
netmask : 255.255.0.0
device : podman0
flags : 4163<BROADCAST,RUNNING,UP,MULTICAST>
mtu : 1500
broadcast : 10.88.255.255
ether : aa:7a:f2:0b:f6:94
inet6 : ['fe80::c40:11ff:fef8:5cf7%veth0']
device : veth0
flags : 4163<BROADCAST,RUNNING,UP,MULTICAST>
mtu : 1500
ether : ba:83:a5:c3:2e:d7
device : wlp2s0
flags : 4098<BROADCAST,MULTICAST>
mtu : 1500

PACKAGE VERSIONS
action_msgs : latest=2.0.3, local=2.0.3
actionlib_msgs : latest=5.3.7, local=5.3.6
ament_cmake : latest=2.5.6, local=2.5.5
ament_cmake_auto : latest=2.5.6, local=2.5.5
ament_cmake_copyright : latest=0.17.4, local=0.17.4
ament_cmake_core : latest=2.5.6, local=2.5.5
ament_cmake_cppcheck : latest=0.17.4, local=0.17.4
ament_cmake_cpplint : latest=0.17.4, local=0.17.4
ament_cmake_export_definitions : latest=2.5.6, local=2.5.5
ament_cmake_export_dependencies : latest=2.5.6, local=2.5.5
ament_cmake_export_include_directories : latest=2.5.6, local=2.5.5
ament_cmake_export_interfaces : latest=2.5.6, local=2.5.5
ament_cmake_export_libraries : latest=2.5.6, local=2.5.5
ament_cmake_export_link_flags : latest=2.5.6, local=2.5.5
ament_cmake_export_targets : latest=2.5.6, local=2.5.5
ament_cmake_flake8 : latest=0.17.4, local=0.17.4
ament_cmake_gen_version_h : latest=2.5.6, local=2.5.5
ament_cmake_gmock : latest=2.5.6, local=2.5.5
ament_cmake_gtest : latest=2.5.6, local=2.5.5
ament_cmake_include_directories : latest=2.5.6, local=2.5.5
ament_cmake_libraries : latest=2.5.6, local=2.5.5
ament_cmake_lint_cmake : latest=0.17.4, local=0.17.4
ament_cmake_pep257 : latest=0.17.4, local=0.17.4
ament_cmake_pytest : latest=2.5.6, local=2.5.5
ament_cmake_python : latest=2.5.6, local=2.5.5
ament_cmake_ros : latest=0.12.0, local=0.12.0
ament_cmake_target_dependencies : latest=2.5.6, local=2.5.5
ament_cmake_test : latest=2.5.6, local=2.5.5
ament_cmake_uncrustify : latest=0.17.4, local=0.17.4
ament_cmake_version : latest=2.5.6, local=2.5.5
ament_cmake_xmllint : latest=0.17.4, local=0.17.4
ament_copyright : latest=0.17.4, local=0.17.4
ament_cppcheck : latest=0.17.4, local=0.17.4
ament_cpplint : latest=0.17.4, local=0.17.4
ament_flake8 : latest=0.17.4, local=0.17.4
ament_index_cpp : latest=1.8.3, local=1.8.2
ament_index_python : latest=1.8.3, local=1.8.2
ament_lint : latest=0.17.4, local=0.17.4
ament_lint_auto : latest=0.17.4, local=0.17.4
ament_lint_cmake : latest=0.17.4, local=0.17.4
ament_lint_common : latest=0.17.4, local=0.17.4
ament_package : latest=0.16.5, local=0.16.5
ament_pep257 : latest=0.17.4, local=0.17.4
ament_uncrustify : latest=0.17.4, local=0.17.4
ament_xmllint : latest=0.17.4, local=0.17.4
builtin_interfaces : latest=2.0.3, local=2.0.3
class_loader : latest=2.7.0, local=2.7.0
common_interfaces : latest=5.3.7, local=5.3.6
composition_interfaces : latest=2.0.3, local=2.0.3
console_bridge_vendor : latest=1.7.1, local=1.7.1
diagnostic_msgs : latest=5.3.7, local=5.3.6
domain_coordinator : latest=0.12.0, local=0.12.0
fastrtps_cmake_module : latest=3.6.3, local=3.6.3
geometry_msgs : latest=5.3.7, local=5.3.6
launch : latest=3.4.10, local=3.4.10
launch_ros : latest=0.26.11, local=0.26.11
launch_testing : latest=3.4.10, local=3.4.10
launch_testing_ament_cmake : latest=3.4.10, local=3.4.10
launch_testing_ros : latest=0.26.11, local=0.26.11
launch_xml : latest=3.4.10, local=3.4.10
launch_yaml : latest=3.4.10, local=3.4.10
libstatistics_collector : latest=1.7.4, local=1.7.4
libyaml_vendor : latest=1.6.3, local=1.6.3
lifecycle_msgs : latest=2.0.3, local=2.0.3
nav_msgs : latest=5.3.7, local=5.3.6
osrf_pycommon : latest=2.1.7, local=2.1.7
pluginlib : latest=5.4.5, local=5.4.4
python_cmake_module : latest=0.11.1, local=0.11.1
rcl : latest=9.2.9, local=9.2.9
rcl_action : latest=9.2.9, local=9.2.9
rcl_interfaces : latest=2.0.3, local=2.0.3
rcl_lifecycle : latest=9.2.9, local=9.2.9
rcl_logging_interface : latest=3.1.1, local=3.1.1
rcl_logging_spdlog : latest=3.1.1, local=3.1.1
rcl_yaml_param_parser : latest=9.2.9, local=9.2.9
rclcpp : latest=28.1.18, local=28.1.16
rclcpp_action : latest=28.1.18, local=28.1.16
rclcpp_components : latest=28.1.18, local=28.1.16
rclcpp_lifecycle : latest=28.1.18, local=28.1.16
rclpy : latest=7.1.11, local=7.1.9
rcpputils : latest=2.11.3, local=2.11.3
rcutils : latest=6.7.5, local=6.7.5
rmw : latest=7.3.3, local=7.3.3
rmw_dds_common : latest=3.1.1, local=3.1.1
rmw_fastrtps_cpp : latest=8.4.3, local=8.4.3
rmw_fastrtps_shared_cpp : latest=8.4.3, local=8.4.3
rmw_implementation : latest=2.15.6, local=2.15.6
rmw_implementation_cmake : latest=7.3.3, local=7.3.3
ros2action : latest=0.32.9, local=0.32.8
ros2cli : latest=0.32.9, local=0.32.8
ros2cli_common_extensions : latest=0.3.1, local=0.3.1
ros2component : latest=0.32.9, local=0.32.8
ros2doctor : latest=0.32.9, local=0.32.8
ros2interface : latest=0.32.9, local=0.32.8
ros2launch : latest=0.26.11, local=0.26.11
ros2lifecycle : latest=0.32.9, local=0.32.8
ros2multicast : latest=0.32.9, local=0.32.8
ros2node : latest=0.32.9, local=0.32.8
ros2param : latest=0.32.9, local=0.32.8
ros2pkg : latest=0.32.9, local=0.32.8
ros2plugin : latest=5.4.5, local=5.4.4
ros2run : latest=0.32.9, local=0.32.8
ros2service : latest=0.32.9, local=0.32.8
ros2topic : latest=0.32.9, local=0.32.8
ros_core : latest=0.11.0, local=0.11.0
ros_environment : latest=4.2.1, local=4.2.1
ros_workspace : latest=1.0.3, local=1.0.3
rosgraph_msgs : latest=2.0.3, local=2.0.3
rosidl_adapter : latest=4.6.7, local=4.6.7
rosidl_cli : latest=4.6.7, local=4.6.7
rosidl_cmake : latest=4.6.7, local=4.6.7
rosidl_core_generators : latest=0.2.1, local=0.2.0
rosidl_core_runtime : latest=0.2.1, local=0.2.0
rosidl_default_generators : latest=1.6.0, local=1.6.0
rosidl_default_runtime : latest=1.6.0, local=1.6.0
rosidl_dynamic_typesupport : latest=0.1.2, local=0.1.2
rosidl_dynamic_typesupport_fastrtps : latest=0.1.0, local=0.1.0
rosidl_generator_c : latest=4.6.7, local=4.6.7
rosidl_generator_cpp : latest=4.6.7, local=4.6.7
rosidl_generator_py : latest=0.22.2, local=0.22.2
rosidl_generator_type_description : latest=4.6.7, local=4.6.7
rosidl_parser : latest=4.6.7, local=4.6.7
rosidl_pycommon : latest=4.6.7, local=4.6.7
rosidl_runtime_c : latest=4.6.7, local=4.6.7
rosidl_runtime_cpp : latest=4.6.7, local=4.6.7
rosidl_runtime_py : latest=0.13.1, local=0.13.1
rosidl_typesupport_c : latest=3.2.2, local=3.2.2
rosidl_typesupport_cpp : latest=3.2.2, local=3.2.2
rosidl_typesupport_fastrtps_c : latest=3.6.3, local=3.6.3
rosidl_typesupport_fastrtps_cpp : latest=3.6.3, local=3.6.3
rosidl_typesupport_interface : latest=4.6.7, local=4.6.7
rosidl_typesupport_introspection_c : latest=4.6.7, local=4.6.7
rosidl_typesupport_introspection_cpp : latest=4.6.7, local=4.6.7
rpyutils : latest=0.4.2, local=0.4.2
sensor_msgs : latest=5.3.7, local=5.3.6
service_msgs : latest=2.0.3, local=2.0.3
shape_msgs : latest=5.3.7, local=5.3.6
spdlog_vendor : latest=1.6.1, local=1.6.1
sros2 : latest=0.13.6, local=0.13.5
sros2_cmake : latest=0.13.6, local=0.13.5
statistics_msgs : latest=2.0.3, local=2.0.3
std_msgs : latest=5.3.7, local=5.3.6
std_srvs : latest=5.3.7, local=5.3.6
stereo_msgs : latest=5.3.7, local=5.3.6
tinyxml2_vendor : latest=0.9.2, local=0.9.2
tracetools : latest=8.2.5, local=8.2.5
trajectory_msgs : latest=5.3.7, local=5.3.6
type_description_interfaces : latest=2.0.3, local=2.0.3
uncrustify_vendor : latest=3.0.1, local=3.0.1
unique_identifier_msgs : latest=2.5.0, local=2.5.0
visualization_msgs : latest=5.3.7, local=5.3.6
eigen3_cmake_module : latest=0.3.0, local=0.3.0
kdl_parser : latest=2.11.0, local=2.11.0
message_filters : latest=4.11.12, local=4.11.10
orocos_kdl_vendor : latest=0.5.1, local=0.5.1
robot_state_publisher : latest=3.3.3, local=3.3.3
tf2 : latest=0.36.20, local=0.36.19
tf2_msgs : latest=0.36.20, local=0.36.19
tf2_ros : latest=0.36.20, local=0.36.19
urdf : latest=2.10.0, local=2.10.0
urdf_parser_plugin : latest=2.10.0, local=2.10.0
xacro : latest=2.1.1, local=2.1.1

PLATFORM INFORMATION
system : Linux
platform info : Linux-6.19.8-200.fc43.x86_64-x86_64-with-glibc2.39
release : 6.19.8-200.fc43.x86_64
processor : x86_64

QOS COMPATIBILITY LIST
topic [type] : /parameter_events [rcl_interfaces/msg/ParameterEvent]
publisher node : _ros2cli_daemon_11_add043595f3e44289744b0505ca8b213
subscriber node : swiftpro_hardware
compatibility status : OK
topic [type] : /parameter_events [rcl_interfaces/msg/ParameterEvent]
publisher node : swiftpro_hardware
subscriber node : swiftpro_hardware
compatibility status : OK

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']}

Expected behavior

When an action client sends a goal with a UUID that duplicates a recently completed goal, the action server should reject the goal gracefully and return an appropriate error response to the client. No exception should propagate to terminate().

Actual behavior

The action server throws std::runtime_error("Failed to accept new goal") during goal handle cleanup, which calls std::terminate() and crashes the node process.

Additional information

No response

Activity

  1. fujitatomoya commented on Apr 1, 2026

    @fujitatomoya
    Collaborator

    @Smit-tay thanks for creating issue.

    actually #2953 (depends on ros2/rcl#1257) is merged to rolling only, but humble, jazzy and kilted... this is because #2953 is ABI breaking change.

    so it is not straight-forward to backport the fix, we need to adjust some code that keeps the backward compatibility.
    IMO, ros2/rcl#1257 should be fine, this is ABI compatible change. for #2953, instead of adding try_abord as new member function, we can inline that in the dtor to keep the compatibility. with this, i believe we can fix the problem for downstream distros. what do you think?

  2. Smit-tay commented on Apr 1, 2026

    @Smit-tay
    Author

    @fujitatomoya Thanks for the quick reply and explanation.

    I don't have a deep understanding of the internals of ServerGoalHandle (or the exact changes in #2953), but I do understand the core issue: the destructor throws in some cases (like duplicate goal UUIDs), which violates long-standing C++ standards. This leads to std::terminate() and a node crash. That's clearly a bug that shouldn't ever have happened.

    Your proposed approach makes sense to me:

    I'm happy to test a backport patch on Jazzy once it's ready.

  3. nileshvishwakarma2004 commented on Apr 2, 2026

    @nileshvishwakarma2004

    @fujitatomoya @Smit-tay

    Hello everyone,

    I have been following this issue and the discussion regarding the ABI compatibility challenges for the Jazzy backport. I am very interested in contributing to this fix as part of my proposal for the "Fix RCLCpp Action Reordering Bugs" task.

    I understand the core problem where the destructor in ServerGoalHandle throws an exception on duplicate goal UUIDs, leading to std::terminate(). The proposed approach by @fujitatomoya to inline the logic in the destructor to maintain ABI compatibility seems like a solid path forward.

    I have already submitted a formal proposal for this and I am keen to start working on a reproduction case and a potential patch for Jazzy. I have my environment set up with ROS 2 Jazzy on Ubuntu 24.04 and I'm ready to assist with testing or implementation.

    Looking forward to your guidance on how I can best align my efforts with the current maintainers' plan.

    Best regards,
    Nilesh Vishwakarma

  4. fujitatomoya commented on Apr 2, 2026

    @fujitatomoya
    Collaborator

    @vishwakarmanilesh7398-driod if you can take care of this, that would be appreciated. as i and @Smit-tay mentioned above, it should not be complicated to backport with ABI compatibility.

    I have already submitted a formal proposal for this

    where did you submit the PR? i am happy to review.

  5. nileshvishwakarma2004 commented on Apr 2, 2026

    @nileshvishwakarma2004

    Thanks! I have shared the proposal but haven’t opened the PR yet. I’ll submit it soon.

  6. peter-mitrano-ar commented on Sep 14, 2026

    @peter-mitrano-ar
    Contributor

    @nileshvishwakarma2004 any updates on this? I am also hoping this can be fixed in Jazzy

  7. Smit-tay commented on Sep 14, 2026

    @Smit-tay
    Author

    Probably because I used Claude to help me provide the correct information, this bug is being ignored.

  8. jmachowinski commented on Sep 14, 2026

    @jmachowinski
    Collaborator

    Nobody is ignoring this bug. The person that said he would work on the bug did simply not open any PR. Feel free to do a PR yourself...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

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