diff --git a/rclcpp_action/include/rclcpp_action/server.hpp b/rclcpp_action/include/rclcpp_action/server.hpp index 7aede9a..a6059f1 100644 --- a/rclcpp_action/include/rclcpp_action/server.hpp +++ b/rclcpp_action/include/rclcpp_action/server.hpp @@ -352,16 +352,20 @@ protected: CancelResponse call_handle_cancel_callback(const GoalUUID & uuid) override { - std::lock_guard lock(goal_handles_mutex_); + std::shared_ptr> goal_handle; + { + std::lock_guard lock(goal_handles_mutex_); + auto element = goal_handles_.find(uuid); + if (element != goal_handles_.end()) { + goal_handle = element->second.lock(); + } + } + CancelResponse resp = CancelResponse::REJECT; - auto element = goal_handles_.find(uuid); - if (element != goal_handles_.end()) { - std::shared_ptr> goal_handle = element->second.lock(); - if (goal_handle) { - resp = handle_cancel_(goal_handle); - if (CancelResponse::ACCEPT == resp) { - goal_handle->_cancel_goal(); - } + if (goal_handle) { + resp = handle_cancel_(goal_handle); + if (CancelResponse::ACCEPT == resp) { + goal_handle->_cancel_goal(); } } return resp;