events.c do_add_event() only traverse event array once

we already go through the whole array might as well save the free slot as well

Change-Id: I6e1164b57a5510f5de5555d2cb91379afc58ae08
This commit is contained in:
William Wilgus 2022-12-08 05:10:01 -05:00 committed by William Wilgus
parent 66a411a1ba
commit f6f12db062

View file

@ -43,28 +43,28 @@ static struct sysevent events[MAX_SYS_EVENTS];
static bool do_add_event(unsigned short id, bool oneshot, bool user_data_valid,
void *handler, void *user_data)
{
int i;
/* Check if the event already exists. */
for (i = 0; i < MAX_SYS_EVENTS; i++)
int free = -1;
/* Check if the event already exists. & lowest free slot available */
for (int i = MAX_SYS_EVENTS - 1; i >= 0; i--)
{
if (events[i].handler.callback == handler && events[i].id == id
&& (!user_data_valid || (user_data == events[i].handler.user_data)))
{
return false;
}
/* Try to find a free slot. */
for (i = 0; i < MAX_SYS_EVENTS; i++)
{
if (events[i].handler.callback == NULL)
{
events[i].id = id;
events[i].oneshot = oneshot;
if ((events[i].has_user_data = user_data_valid))
events[i].handler.user_data = user_data;
events[i].handler.callback = handler;
return true;
else if (events[i].handler.callback == NULL)
free = i;
}
/* is there a free slot? */
if (free >= 0)
{
events[free].id = id;
events[free].oneshot = oneshot;
if ((events[free].has_user_data = user_data_valid))
events[free].handler.user_data = user_data;
events[free].handler.callback = handler;
return true;
}
panicf("event line full");