mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
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:
parent
66a411a1ba
commit
f6f12db062
1 changed files with 19 additions and 19 deletions
|
@ -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");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue