From b5cfe56199530dbe42f14a9339a5934da5fb97dd Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Thu, 28 Dec 2023 08:31:27 +1100 Subject: [PATCH] canard: use common semaphore from handler_list inside subscriber --- canard/handler_list.h | 4 +++- canard/subscriber.h | 16 +++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/canard/handler_list.h b/canard/handler_list.h index f0a2e05..f322063 100644 --- a/canard/handler_list.h +++ b/canard/handler_list.h @@ -68,7 +68,9 @@ class HandlerList { protected: uint8_t index; HandlerList* next; - +#ifdef CANARD_MUTEX_ENABLED + Canard::Semaphore& get_sem() { return sem[index]; } +#endif private: static HandlerList* head[CANARD_NUM_HANDLERS]; #ifdef CANARD_MUTEX_ENABLED diff --git a/canard/subscriber.h b/canard/subscriber.h index a254801..a47d77d 100644 --- a/canard/subscriber.h +++ b/canard/subscriber.h @@ -42,7 +42,7 @@ class Subscriber : public HandlerList { HandlerList(CanardTransferTypeBroadcast, msgtype::cxx_iface::ID, msgtype::cxx_iface::SIGNATURE, _index), cb (_cb) { #ifdef CANARD_MUTEX_ENABLED - WITH_SEMAPHORE(sem[index]); + WITH_SEMAPHORE(get_sem()); #endif next = branch_head[index]; branch_head[index] = this; @@ -53,6 +53,9 @@ class Subscriber : public HandlerList { // destructor, remove the entry from the singly-linked list ~Subscriber() { +#ifdef CANARD_MUTEX_ENABLED + WITH_SEMAPHORE(get_sem()); +#endif Subscriber* entry = branch_head[index]; if (entry == this) { branch_head[index] = next; @@ -70,6 +73,9 @@ class Subscriber : public HandlerList { /// @brief parse the message and call the callback /// @param transfer transfer object void handle_message(const CanardRxTransfer& transfer) override { +#ifdef CANARD_MUTEX_ENABLED + WITH_SEMAPHORE(get_sem()); +#endif msgtype msg {}; msgtype::cxx_iface::decode(&transfer, &msg); // call all registered callbacks in one go @@ -83,20 +89,12 @@ class Subscriber : public HandlerList { private: Subscriber* next; static Subscriber *branch_head[CANARD_NUM_HANDLERS]; -#ifdef CANARD_MUTEX_ENABLED - static Canard::Semaphore sem[CANARD_NUM_HANDLERS]; -#endif Callback &cb; }; template Subscriber* Subscriber::branch_head[] = {nullptr}; -#ifdef CANARD_MUTEX_ENABLED -template -Canard::Semaphore Subscriber::sem[CANARD_NUM_HANDLERS]; -#endif - template class SubscriberArgCb { public: