diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2014-07-09 07:23:58 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2014-07-09 07:23:58 +0100 |
commit | 9a38a5d0627d87046ed08b2f3f69d9422974ac7b (patch) | |
tree | c9cffec6c1be7dd93900f9112c71bfc1a6593fc9 | |
parent | 3c818abaea53b61c15393d1aeaefd1eba52f4d5c (diff) | |
download | netsurf-9a38a5d0627d87046ed08b2f3f69d9422974ac7b.tar.gz netsurf-9a38a5d0627d87046ed08b2f3f69d9422974ac7b.tar.bz2 |
Simplify schedule_remove.
Since entries are unique we can stop looking when we have a match.
-rw-r--r-- | riscos/schedule.c | 21 |
1 files changed, 13 insertions, 8 deletions
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) { |