Skip to content

Commit 6ad551a

Browse files
authored
use std::recursive_mutex for action requests. (#2798)
Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
1 parent 0162861 commit 6ad551a

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

rclcpp_action/src/client_base.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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(
399399
void
400400
ClientBase::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(
433433
void
434434
ClientBase::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(
462462
void
463463
ClientBase::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

Comments
 (0)