opt/1085-optimization-and-cleanup #37
@@ -118,6 +118,11 @@ void relay_chn_notify_deinit(void)
|
|||||||
*/
|
*/
|
||||||
static relay_chn_listener_entry_t* find_listener_entry(relay_chn_state_listener_t listener)
|
static relay_chn_listener_entry_t* find_listener_entry(relay_chn_state_listener_t listener)
|
||||||
{
|
{
|
||||||
|
if (listLIST_IS_EMPTY(&listeners)) {
|
||||||
|
ESP_LOGD(TAG, "No listeners registered");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// Iterate through the linked list of listeners
|
// Iterate through the linked list of listeners
|
||||||
for (ListItem_t *pxListItem = listGET_HEAD_ENTRY(&listeners);
|
for (ListItem_t *pxListItem = listGET_HEAD_ENTRY(&listeners);
|
||||||
pxListItem != listGET_END_MARKER(&listeners);
|
pxListItem != listGET_END_MARKER(&listeners);
|
||||||
@@ -164,6 +169,11 @@ static void do_remove_listener(relay_chn_state_listener_t listener)
|
|||||||
} else {
|
} else {
|
||||||
ESP_LOGD(TAG, "Listener %p not found for unregistration.", listener);
|
ESP_LOGD(TAG, "Listener %p not found for unregistration.", listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (listLIST_IS_EMPTY(&listeners)) {
|
||||||
|
// Flush all pending notifications in the queue
|
||||||
|
xQueueReset(notify_msg_queue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t relay_chn_notify_add_listener(relay_chn_state_listener_t listener)
|
esp_err_t relay_chn_notify_add_listener(relay_chn_state_listener_t listener)
|
||||||
@@ -191,7 +201,7 @@ void relay_chn_notify_remove_listener(relay_chn_state_listener_t listener)
|
|||||||
}
|
}
|
||||||
|
|
||||||
relay_chn_notify_msg_t msg = { .cmd = RELAY_CHN_NOTIFY_CMD_REMOVE_LISTENER, .payload.listener = listener };
|
relay_chn_notify_msg_t msg = { .cmd = RELAY_CHN_NOTIFY_CMD_REMOVE_LISTENER, .payload.listener = listener };
|
||||||
if (xQueueSend(notify_msg_queue, &msg, 0) != pdTRUE) {
|
if (xQueueSendToFront(notify_msg_queue, &msg, 0) != pdTRUE) {
|
||||||
ESP_LOGW(TAG, "Notify queue is full, failed to queue remove_listener");
|
ESP_LOGW(TAG, "Notify queue is full, failed to queue remove_listener");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user