Skip to content

Commit 976b2dd

Browse files
MichaelOrlovmorlov-apexai
authored andcommitted
Use recursive_mutex for callback lock in any_subscription_callback
Signed-off-by: Michael Orlov <[email protected]>
1 parent 7379274 commit 976b2dd

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

rclcpp/include/rclcpp/any_subscription_callback.hpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)