@@ -42,7 +42,7 @@ class Subscriber : public HandlerList {
4242 HandlerList (CanardTransferTypeBroadcast, msgtype::cxx_iface::ID, msgtype::cxx_iface::SIGNATURE, _index),
4343 cb (_cb) {
4444#ifdef CANARD_MUTEX_ENABLED
45- WITH_SEMAPHORE (sem[index] );
45+ WITH_SEMAPHORE (get_sem () );
4646#endif
4747 next = branch_head[index];
4848 branch_head[index] = this ;
@@ -53,6 +53,9 @@ class Subscriber : public HandlerList {
5353
5454 // destructor, remove the entry from the singly-linked list
5555 ~Subscriber () {
56+ #ifdef CANARD_MUTEX_ENABLED
57+ WITH_SEMAPHORE (get_sem ());
58+ #endif
5659 Subscriber<msgtype>* entry = branch_head[index];
5760 if (entry == this ) {
5861 branch_head[index] = next;
@@ -70,6 +73,9 @@ class Subscriber : public HandlerList {
7073 // / @brief parse the message and call the callback
7174 // / @param transfer transfer object
7275 void handle_message (const CanardRxTransfer& transfer) override {
76+ #ifdef CANARD_MUTEX_ENABLED
77+ WITH_SEMAPHORE (get_sem ());
78+ #endif
7379 msgtype msg {};
7480 msgtype::cxx_iface::decode (&transfer, &msg);
7581 // call all registered callbacks in one go
@@ -83,20 +89,12 @@ class Subscriber : public HandlerList {
8389private:
8490 Subscriber<msgtype>* next;
8591 static Subscriber<msgtype> *branch_head[CANARD_NUM_HANDLERS];
86- #ifdef CANARD_MUTEX_ENABLED
87- static Canard::Semaphore sem[CANARD_NUM_HANDLERS];
88- #endif
8992 Callback<msgtype> &cb;
9093};
9194
9295template <typename msgtype>
9396Subscriber<msgtype>* Subscriber<msgtype>::branch_head[] = {nullptr };
9497
95- #ifdef CANARD_MUTEX_ENABLED
96- template <typename msgtype>
97- Canard::Semaphore Subscriber<msgtype>::sem[CANARD_NUM_HANDLERS];
98- #endif
99-
10098template <typename T, typename msgtype>
10199class SubscriberArgCb {
102100public:
0 commit comments