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)
|
||||
{
|
||||
if (listLIST_IS_EMPTY(&listeners)) {
|
||||
ESP_LOGD(TAG, "No listeners registered");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Iterate through the linked list of listeners
|
||||
for (ListItem_t *pxListItem = listGET_HEAD_ENTRY(&listeners);
|
||||
pxListItem != listGET_END_MARKER(&listeners);
|
||||
@@ -164,6 +169,11 @@ static void do_remove_listener(relay_chn_state_listener_t listener)
|
||||
} else {
|
||||
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)
|
||||
@@ -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 };
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user