From 9a38a5d0627d87046ed08b2f3f69d9422974ac7b Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 9 Jul 2014 07:23:58 +0100 Subject: Simplify schedule_remove. Since entries are unique we can stop looking when we have a match. --- riscos/schedule.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'riscos') diff --git a/riscos/schedule.c b/riscos/schedule.c index 286bdefa9..59cb97d9b 100644 --- a/riscos/schedule.c +++ b/riscos/schedule.c @@ -62,16 +62,21 @@ os_t sched_time; static nserror schedule_remove(void (*callback)(void *p), void *p) { - struct sched_entry *entry, *next; + struct sched_entry *entry, *prev; - for (entry = &sched_queue; entry->next; entry = entry->next) { - if (entry->next->callback != callback || entry->next->p != p) + prev = &sched_queue; + + for (entry = prev->next; entry; entry = prev->next) { + if (entry->callback != callback || entry->p != p) { + prev = entry; continue; - next = entry->next; - entry->next = entry->next->next; - free(next); - if (!entry->next) - break; + } + + prev->next = entry->next; + free(entry); + + /* There can only ever be one match, and we've found it */ + break; } if (sched_queue.next) { -- cgit v1.2.3