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,30 +43,30 @@ static struct sysevent events[MAX_SYS_EVENTS];
static bool do_add_event(unsigned short id, bool oneshot, bool user_data_valid, static bool do_add_event(unsigned short id, bool oneshot, bool user_data_valid,
void *handler, void *user_data) void *handler, void *user_data)
{ {
int i; int free = -1;
/* Check if the event already exists. & lowest free slot available */
/* Check if the event already exists. */ for (int i = MAX_SYS_EVENTS - 1; i >= 0; i--)
for (i = 0; i < MAX_SYS_EVENTS; i++)
{ {
if (events[i].handler.callback == handler && events[i].id == id if (events[i].handler.callback == handler && events[i].id == id
&& (!user_data_valid || (user_data == events[i].handler.user_data))) && (!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; return false;
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"); panicf("event line full");
return false; return false;
} }