Fix framebufefr port callback scheduling

svn path=/trunk/netsurf/; revision=6838
This commit is contained in:
Vincent Sanders 2009-03-24 14:11:10 +00:00
parent da3b0227a7
commit d471e0fd25

View File

@ -58,10 +58,10 @@ void schedule(int cs_ival, void (*callback)(void *p), void *p)
tv.tv_sec = 0; tv.tv_sec = 0;
tv.tv_usec = cs_ival * 10000; tv.tv_usec = cs_ival * 10000;
LOG(("adding callback %p, %p at %d cs", callback, p, cs_ival));
nscb = calloc(1, sizeof(struct nscallback)); nscb = calloc(1, sizeof(struct nscallback));
LOG(("adding callback %p for %p(%p) at %d cs", nscb, callback, p, cs_ival));
gettimeofday(&nscb->tv, NULL); gettimeofday(&nscb->tv, NULL);
timeradd(&nscb->tv, &tv, &nscb->tv); timeradd(&nscb->tv, &tv, &nscb->tv);
@ -101,8 +101,8 @@ void schedule_remove(void (*callback)(void *p), void *p)
(cur_nscb->p == p)) { (cur_nscb->p == p)) {
/* item to remove */ /* item to remove */
LOG(("removing %p(%p)", LOG(("callback entry %p removing %p(%p)",
cur_nscb->callback, cur_nscb->p)); cur_nscb, cur_nscb->callback, cur_nscb->p));
/* remove callback */ /* remove callback */
unlnk_nscb = cur_nscb; unlnk_nscb = cur_nscb;
@ -147,20 +147,26 @@ bool schedule_run(void)
/* remove callback */ /* remove callback */
unlnk_nscb = cur_nscb; unlnk_nscb = cur_nscb;
cur_nscb = unlnk_nscb->next;
if (prev_nscb == NULL) { if (prev_nscb == NULL) {
schedule_list = cur_nscb; schedule_list = unlnk_nscb->next;
} else { } else {
prev_nscb->next = cur_nscb; prev_nscb->next = unlnk_nscb->next;
} }
LOG(("calling %p with %p", LOG(("callback entry %p running %p(%p)",
unlnk_nscb->callback, unlnk_nscb->p)); unlnk_nscb, unlnk_nscb->callback, unlnk_nscb->p));
/* call callback */ /* call callback */
unlnk_nscb->callback(unlnk_nscb->p); unlnk_nscb->callback(unlnk_nscb->p);
free (unlnk_nscb); free (unlnk_nscb);
/* the callback might have modded the list, so start
* again
*/
cur_nscb = schedule_list;
prev_nscb = NULL;
} else { } else {
/* move to next element */ /* move to next element */
prev_nscb = cur_nscb; prev_nscb = cur_nscb;