From ac60741c289fc747e4b8b8ca1d0aad053beb2dee Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Fri, 3 Jul 2009 23:40:26 +0000 Subject: Fix scheduler to handle delays of greater than one second. Fixes continual reload issues on pages with meta refresh. svn path=/trunk/netsurf/; revision=8293 --- framebuffer/schedule.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'framebuffer/schedule.c') diff --git a/framebuffer/schedule.c b/framebuffer/schedule.c index 64807370b..986c8e909 100644 --- a/framebuffer/schedule.c +++ b/framebuffer/schedule.c @@ -55,8 +55,8 @@ void schedule(int cs_ival, void (*callback)(void *p), void *p) struct nscallback *nscb; struct timeval tv; - tv.tv_sec = 0; - tv.tv_usec = cs_ival * 10000; + tv.tv_sec = cs_ival / 100; /* cs to seconds */ + tv.tv_usec = (cs_ival % 100) * 10000; /* remainder to microseconds */ nscb = calloc(1, sizeof(struct nscallback)); @@ -97,12 +97,12 @@ void schedule_remove(void (*callback)(void *p), void *p) prev_nscb = NULL; while (cur_nscb != NULL) { - if ((cur_nscb->callback == callback) && + if ((cur_nscb->callback == callback) && (cur_nscb->p == p)) { /* item to remove */ - + LOG(("callback entry %p removing %p(%p)", - cur_nscb, cur_nscb->callback, cur_nscb->p)); + cur_nscb, cur_nscb->callback, cur_nscb->p)); /* remove callback */ unlnk_nscb = cur_nscb; @@ -118,7 +118,7 @@ void schedule_remove(void (*callback)(void *p), void *p) /* move to next element */ prev_nscb = cur_nscb; cur_nscb = prev_nscb->next; - } + } } } @@ -144,7 +144,7 @@ bool schedule_run(void) while (cur_nscb != NULL) { if (timercmp(&tv, &cur_nscb->tv, >)) { /* scheduled time */ - + /* remove callback */ unlnk_nscb = cur_nscb; @@ -155,14 +155,14 @@ bool schedule_run(void) } LOG(("callback entry %p running %p(%p)", - unlnk_nscb, unlnk_nscb->callback, unlnk_nscb->p)); + unlnk_nscb, unlnk_nscb->callback, unlnk_nscb->p)); /* call callback */ unlnk_nscb->callback(unlnk_nscb->p); free (unlnk_nscb); /* the callback might have modded the list, so start - * again + * again */ cur_nscb = schedule_list; prev_nscb = NULL; @@ -171,7 +171,7 @@ bool schedule_run(void) /* move to next element */ prev_nscb = cur_nscb; cur_nscb = prev_nscb->next; - } + } } return true; } @@ -188,7 +188,7 @@ void list_schedule(void) cur_nscb = schedule_list; while (cur_nscb != NULL) { - LOG(("Schedule %p at %ld:%ld", + LOG(("Schedule %p at %ld:%ld", cur_nscb, cur_nscb->tv.tv_sec, cur_nscb->tv.tv_usec)); cur_nscb = cur_nscb->next; } -- cgit v1.2.3