From: Paul Jakma Date: Tue, 28 Feb 2012 18:32:56 +0000 (+0000) Subject: lib: fix incorrect thread list processing loops X-Git-Tag: frr-2.0-rc1~1891 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=b5043aab;p=matthieu%2Ffrr.git lib: fix incorrect thread list processing loops * thread.c: (thread_timer_process,thread_process) thread_list_delete nulls thread->next. Loops need to save next first, or will only process the head. Problem noted by Lou Berger . --- diff --git a/lib/thread.c b/lib/thread.c index 6d3c3cb386..b36c43a9a6 100644 --- a/lib/thread.c +++ b/lib/thread.c @@ -972,10 +972,12 @@ static unsigned int thread_timer_process (struct thread_list *list, struct timeval *timenow) { struct thread *thread; + struct thread *next; unsigned int ready = 0; - for (thread = list->head; thread; thread = thread->next) + for (thread = list->head; thread; thread = next) { + next = thread->next; if (timeval_cmp (*timenow, thread->u.sands) < 0) return ready; thread_list_delete (list, thread); @@ -991,10 +993,12 @@ static unsigned int thread_process (struct thread_list *list) { struct thread *thread; + struct thread *next; unsigned int ready = 0; - for (thread = list->head; thread; thread = thread->next) + for (thread = list->head; thread; thread = next) { + next = thread->next; thread_list_delete (list, thread); thread->type = THREAD_READY; thread_list_add (&thread->master->ready, thread);