Skip to content

Commit b5cfe56

Browse files
canard: use common semaphore from handler_list inside subscriber
1 parent 50dcf28 commit b5cfe56

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

canard/handler_list.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ class HandlerList {
6868
protected:
6969
uint8_t index;
7070
HandlerList* next;
71-
71+
#ifdef CANARD_MUTEX_ENABLED
72+
Canard::Semaphore& get_sem() { return sem[index]; }
73+
#endif
7274
private:
7375
static HandlerList* head[CANARD_NUM_HANDLERS];
7476
#ifdef CANARD_MUTEX_ENABLED

canard/subscriber.h

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

9295
template <typename msgtype>
9396
Subscriber<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-
10098
template <typename T, typename msgtype>
10199
class SubscriberArgCb {
102100
public:

0 commit comments

Comments
 (0)