Fix duplicate events in inform

This commit is contained in:
Suvendhu Hansa 2025-03-24 12:57:58 +05:30 committed by Amin Ben Romdhane
parent 4d57b1ed19
commit 21021a7134
2 changed files with 30 additions and 30 deletions

View file

@ -215,10 +215,8 @@ void bkp_session_simple_insert_in_parent(const char *parent, const char *child,
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id)
{
char event_idx[32];
mxml_node_t *b;
snprintf(event_idx, sizeof(event_idx), "%d", index);
b = get_bkp_session_node_by_id(bkp_tree, "cwmp_event", id);
if (!b) {
struct xml_data_struct bkp_xml_event = {0};
@ -228,8 +226,9 @@ mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id)
int fault = build_xml_node_data(BKP_EVT_BUILD, bkp_tree, &bkp_xml_event);
if (fault != CWMP_OK)
return NULL;
}
b = get_bkp_session_node_by_id(bkp_tree, "cwmp_event", id);
}
return b;
}

View file

@ -17,7 +17,10 @@
static struct event_container *__cwmp_add_event_container(int event_code, const char *command_key)
{
struct event_container *event_container = NULL;
list_for_each_entry(event_container, &cwmp_ctx.session->events, list) {
struct list_head *ilist;
list_for_each (ilist, &(cwmp_ctx.session->events)) {
event_container = list_entry(ilist, struct event_container, list);
if (event_container->code == event_code) {
return event_container;
}
@ -30,7 +33,7 @@ static struct event_container *__cwmp_add_event_container(int event_code, const
return NULL;
}
INIT_LIST_HEAD(&(event_container->head_dm_parameter));
list_add_tail(&(event_container->list), &(cwmp_ctx.session->events));
list_add(&(event_container->list), ilist->prev);
event_container->code = event_code;
event_container->command_key = command_key ? strdup(command_key) : strdup("");
event_container->next_session = true;
@ -39,6 +42,7 @@ static struct event_container *__cwmp_add_event_container(int event_code, const
}
cwmp_ctx.event_id++;
event_container->id = cwmp_ctx.event_id;
return event_container;
}
@ -54,6 +58,11 @@ void move_next_session_events_to_actual_session()
struct list_head *event_container_list = &(cwmp_ctx.session->events);
list_for_each_entry (event_container, event_container_list, list) {
// cppcheck-suppress uninitvar
if (cwmp_ctx.session->session_status.is_heartbeat && event_container->code != EVENT_IDX_14HEARTBEAT)
continue;
if ((!cwmp_ctx.session->session_status.is_heartbeat) && (event_container->code == EVENT_IDX_14HEARTBEAT))
continue;
event_container->next_session = false;
}
}
@ -61,21 +70,21 @@ void move_next_session_events_to_actual_session()
int cwmp_remove_all_session_events()
{
CWMP_LOG(DEBUG, "%s:%d entry", __func__, __LINE__);
struct list_head *events_ptr = cwmp_ctx.session->events.next;
while (events_ptr != &cwmp_ctx.session->events) {
struct event_container *event_container;
event_container = list_entry(events_ptr, struct event_container, list);
struct event_container *event_container = NULL, *node = NULL;
struct list_head *events_container_list = &(cwmp_ctx.session->events);
list_for_each_entry_safe(event_container, node, events_container_list, list) {
if (event_container->code == EVENT_IDX_14HEARTBEAT || event_container->next_session) {
events_ptr = events_ptr->next;
continue;
}
bkp_session_delete_element("cwmp_event", event_container->id);
free(event_container->command_key);
FREE(event_container->command_key);
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
list_del(&(event_container->list));
free(event_container);
events_ptr = cwmp_ctx.session->events.next;
}
bkp_session_save();
CWMP_LOG(DEBUG, "%s:%d exit", __func__, __LINE__);
return CWMP_OK;
@ -84,29 +93,21 @@ int cwmp_remove_all_session_events()
int remove_single_event(int event_code)
{
CWMP_LOG(DEBUG, "%s:%d entry", __func__, __LINE__);
while (cwmp_ctx.session->events.next != &cwmp_ctx.session->events) {
struct event_container *event_container;
event_container = list_entry(cwmp_ctx.session->events.next, struct event_container, list);
if (event_container->next_session)
continue;
if (event_container->code == event_code) {
struct event_container *event_container = NULL, *node = NULL;
struct list_head *events_container_list = &(cwmp_ctx.session->events);
list_for_each_entry_safe(event_container, node, events_container_list, list) {
if (event_container->code == event_code || !event_container->next_session) {
bkp_session_delete_element("cwmp_event", event_container->id);
if (event_container->command_key)
free(event_container->command_key);
FREE(event_container->command_key);
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
list_del(&(event_container->list));
free(event_container);
}
}
bkp_session_save();
break;
}
if (event_container) {
if (event_container->command_key)
free(event_container->command_key);
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
list_del(&(event_container->list));
free(event_container);
}
}
CWMP_LOG(DEBUG, "%s:%d exit", __func__, __LINE__);
return CWMP_OK;
}