@@ -416,14 +416,14 @@ class AnySubscriptionCallback
416416 // / Disable the callback from being called during dispatch.
417417 void disable ()
418418 {
419- std::unique_lock<std::mutex > callback_lock (callback_mutex_);
419+ std::unique_lock<std::recursive_mutex > callback_lock (callback_mutex_);
420420 callback_disabled_.store (true );
421421 }
422422
423423 // / Enable the callback to be called during dispatch.
424424 void enable ()
425425 {
426- std::unique_lock<std::mutex > callback_lock (callback_mutex_);
426+ std::unique_lock<std::recursive_mutex > callback_lock (callback_mutex_);
427427 callback_disabled_.store (false );
428428 }
429429
@@ -497,7 +497,7 @@ class AnySubscriptionCallback
497497 std::shared_ptr<ROSMessageType> message,
498498 const rclcpp::MessageInfo & message_info)
499499 {
500- std::unique_lock<std::mutex > callback_lock (callback_mutex_);
500+ std::unique_lock<std::recursive_mutex > callback_lock (callback_mutex_);
501501 if (callback_disabled_.load ()) {
502502 return ;
503503 }
@@ -601,7 +601,7 @@ class AnySubscriptionCallback
601601 std::shared_ptr<const rclcpp::SerializedMessage> serialized_message,
602602 const rclcpp::MessageInfo & message_info)
603603 {
604- std::unique_lock<std::mutex > callback_lock (callback_mutex_);
604+ std::unique_lock<std::recursive_mutex > callback_lock (callback_mutex_);
605605 if (callback_disabled_.load ()) {
606606 return ;
607607 }
@@ -684,7 +684,7 @@ class AnySubscriptionCallback
684684 std::shared_ptr<const SubscribedType> message,
685685 const rclcpp::MessageInfo & message_info)
686686 {
687- std::unique_lock<std::mutex > callback_lock (callback_mutex_);
687+ std::unique_lock<std::recursive_mutex > callback_lock (callback_mutex_);
688688 if (callback_disabled_.load ()) {
689689 return ;
690690 }
@@ -818,7 +818,7 @@ class AnySubscriptionCallback
818818 std::unique_ptr<SubscribedType, SubscribedTypeDeleter> message,
819819 const rclcpp::MessageInfo & message_info)
820820 {
821- std::unique_lock<std::mutex > callback_lock (callback_mutex_);
821+ std::unique_lock<std::recursive_mutex > callback_lock (callback_mutex_);
822822 if (callback_disabled_.load ()) {
823823 return ;
824824 }
@@ -1016,7 +1016,7 @@ class AnySubscriptionCallback
10161016 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2162r0.html
10171017 // For now, compose the variant into this class as a private attribute.
10181018 typename HelperT::variant_type callback_variant_;
1019- std::mutex callback_mutex_;
1019+ std::recursive_mutex callback_mutex_;
10201020 std::atomic_bool callback_disabled_{false };
10211021
10221022 SubscribedTypeAllocator subscribed_type_allocator_;
0 commit comments