diff --git a/rclcpp_action/src/client.cpp b/rclcpp_action/src/client.cpp index e687ab3400..2d5018d5af 100644 --- a/rclcpp_action/src/client.cpp +++ b/rclcpp_action/src/client.cpp @@ -318,14 +318,19 @@ ClientBase::handle_result_response( const rmw_request_id_t & response_header, std::shared_ptr response) { - std::lock_guard guard(pimpl_->result_requests_mutex); - const int64_t & sequence_number = response_header.sequence_number; - if (pimpl_->pending_result_responses.count(sequence_number) == 0) { - RCLCPP_ERROR(pimpl_->logger, "unknown result response, ignoring..."); - return; + std::map::node_type pending_result_response; + { + std::lock_guard guard(pimpl_->result_requests_mutex); + const int64_t & sequence_number = response_header.sequence_number; + if (pimpl_->pending_result_responses.count(sequence_number) == 0) { + RCLCPP_ERROR(pimpl_->logger, "unknown result response, ignoring..."); + return; + } + pending_result_response = + pimpl_->pending_result_responses.extract(sequence_number); } - pimpl_->pending_result_responses[sequence_number](response); - pimpl_->pending_result_responses.erase(sequence_number); + auto & response_callback = pending_result_response.mapped(); + response_callback(response); } void