summaryrefslogtreecommitdiff
path: root/riscos/schedule.c
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2014-07-09 07:23:58 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2014-07-09 07:23:58 +0100
commit9a38a5d0627d87046ed08b2f3f69d9422974ac7b (patch)
treec9cffec6c1be7dd93900f9112c71bfc1a6593fc9 /riscos/schedule.c
parent3c818abaea53b61c15393d1aeaefd1eba52f4d5c (diff)
downloadnetsurf-9a38a5d0627d87046ed08b2f3f69d9422974ac7b.tar.gz
netsurf-9a38a5d0627d87046ed08b2f3f69d9422974ac7b.tar.bz2
Simplify schedule_remove.
Since entries are unique we can stop looking when we have a match.
Diffstat (limited to 'riscos/schedule.c')
-rw-r--r--riscos/schedule.c21
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) {