forked from len0rd/rockbox
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,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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue