@@ -172,13 +172,13 @@ class ClientBaseImpl
172172 using ResponseCallback = std::function<void (std::shared_ptr<void > response)>;
173173
174174 std::map<int64_t , ResponseCallback> pending_goal_responses;
175- std::mutex goal_requests_mutex;
175+ std::recursive_mutex goal_requests_mutex;
176176
177177 std::map<int64_t , ResponseCallback> pending_result_responses;
178- std::mutex result_requests_mutex;
178+ std::recursive_mutex result_requests_mutex;
179179
180180 std::map<int64_t , ResponseCallback> pending_cancel_responses;
181- std::mutex cancel_requests_mutex;
181+ std::recursive_mutex cancel_requests_mutex;
182182
183183 std::independent_bits_engine<
184184 std::default_random_engine, 8 , unsigned int > random_bytes_generator;
@@ -386,7 +386,7 @@ ClientBase::handle_goal_response(
386386 const rmw_request_id_t & response_header,
387387 std::shared_ptr<void > response)
388388{
389- std::lock_guard<std::mutex > guard (pimpl_->goal_requests_mutex );
389+ std::lock_guard<std::recursive_mutex > guard (pimpl_->goal_requests_mutex );
390390 const int64_t & sequence_number = response_header.sequence_number ;
391391 if (pimpl_->pending_goal_responses .count (sequence_number) == 0 ) {
392392 RCLCPP_ERROR (pimpl_->logger , " unknown goal response, ignoring..." );
@@ -399,7 +399,7 @@ ClientBase::handle_goal_response(
399399void
400400ClientBase::send_goal_request (std::shared_ptr<void > request, ResponseCallback callback)
401401{
402- std::unique_lock <std::mutex > guard (pimpl_->goal_requests_mutex );
402+ std::lock_guard <std::recursive_mutex > guard (pimpl_->goal_requests_mutex );
403403 int64_t sequence_number;
404404 rcl_ret_t ret = rcl_action_send_goal_request (
405405 pimpl_->client_handle .get (), request.get (), &sequence_number);
@@ -417,7 +417,7 @@ ClientBase::handle_result_response(
417417{
418418 std::map<int64_t , ResponseCallback>::node_type pending_result_response;
419419 {
420- std::lock_guard<std::mutex > guard (pimpl_->result_requests_mutex );
420+ std::lock_guard<std::recursive_mutex > guard (pimpl_->result_requests_mutex );
421421 const int64_t & sequence_number = response_header.sequence_number ;
422422 if (pimpl_->pending_result_responses .count (sequence_number) == 0 ) {
423423 RCLCPP_ERROR (pimpl_->logger , " unknown result response, ignoring..." );
@@ -433,7 +433,7 @@ ClientBase::handle_result_response(
433433void
434434ClientBase::send_result_request (std::shared_ptr<void > request, ResponseCallback callback)
435435{
436- std::lock_guard<std::mutex > guard (pimpl_->result_requests_mutex );
436+ std::lock_guard<std::recursive_mutex > guard (pimpl_->result_requests_mutex );
437437 int64_t sequence_number;
438438 rcl_ret_t ret = rcl_action_send_result_request (
439439 pimpl_->client_handle .get (), request.get (), &sequence_number);
@@ -449,7 +449,7 @@ ClientBase::handle_cancel_response(
449449 const rmw_request_id_t & response_header,
450450 std::shared_ptr<void > response)
451451{
452- std::lock_guard<std::mutex > guard (pimpl_->cancel_requests_mutex );
452+ std::lock_guard<std::recursive_mutex > guard (pimpl_->cancel_requests_mutex );
453453 const int64_t & sequence_number = response_header.sequence_number ;
454454 if (pimpl_->pending_cancel_responses .count (sequence_number) == 0 ) {
455455 RCLCPP_ERROR (pimpl_->logger , " unknown cancel response, ignoring..." );
@@ -462,7 +462,7 @@ ClientBase::handle_cancel_response(
462462void
463463ClientBase::send_cancel_request (std::shared_ptr<void > request, ResponseCallback callback)
464464{
465- std::lock_guard<std::mutex > guard (pimpl_->cancel_requests_mutex );
465+ std::lock_guard<std::recursive_mutex > guard (pimpl_->cancel_requests_mutex );
466466 int64_t sequence_number;
467467 rcl_ret_t ret = rcl_action_send_cancel_request (
468468 pimpl_->client_handle .get (), request.get (), &sequence_number);
0 commit comments