Skip to content

Commit ba9561a

Browse files
fujitatomoyaBarry-Xu-2018
authored andcommitted
extract the result response before the callback is issued. (ros2#2132)
Signed-off-by: Tomoya Fujita <[email protected]>
1 parent 152d920 commit ba9561a

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

rclcpp_action/src/client.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -318,14 +318,19 @@ ClientBase::handle_result_response(
318318
const rmw_request_id_t & response_header,
319319
std::shared_ptr<void> response)
320320
{
321-
std::lock_guard<std::mutex> guard(pimpl_->result_requests_mutex);
322-
const int64_t & sequence_number = response_header.sequence_number;
323-
if (pimpl_->pending_result_responses.count(sequence_number) == 0) {
324-
RCLCPP_ERROR(pimpl_->logger, "unknown result response, ignoring...");
325-
return;
321+
std::map<int64_t, ResponseCallback>::node_type pending_result_response;
322+
{
323+
std::lock_guard<std::mutex> guard(pimpl_->result_requests_mutex);
324+
const int64_t & sequence_number = response_header.sequence_number;
325+
if (pimpl_->pending_result_responses.count(sequence_number) == 0) {
326+
RCLCPP_ERROR(pimpl_->logger, "unknown result response, ignoring...");
327+
return;
328+
}
329+
pending_result_response =
330+
pimpl_->pending_result_responses.extract(sequence_number);
326331
}
327-
pimpl_->pending_result_responses[sequence_number](response);
328-
pimpl_->pending_result_responses.erase(sequence_number);
332+
auto & response_callback = pending_result_response.mapped();
333+
response_callback(response);
329334
}
330335

331336
void

0 commit comments

Comments
 (0)