From 38472b8e4c0a1adc1d2841a425c580d6ffce2d70 Mon Sep 17 00:00:00 2001 Message-Id: <38472b8e4c0a1adc1d2841a425c580d6ffce2d70.1714298716.git.mdw@distorted.org.uk> From: Mark Wooding Date: Thu, 23 Mar 2000 20:42:08 +0000 Subject: [PATCH] Rearrange timeout handling to avoid list corruptions. Organization: Straylight/Edgeware From: mdw --- sel.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/sel.c b/sel.c index 55b5990..04d9ed5 100644 --- a/sel.c +++ b/sel.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: sel.c,v 1.7 1999/12/11 11:12:17 mdw Exp $ + * $Id: sel.c,v 1.8 2000/03/23 20:42:08 mdw Exp $ * * I/O multiplexing support * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: sel.c,v $ + * Revision 1.8 2000/03/23 20:42:08 mdw + * Rearrange timeout handling to avoid list corruptions. + * * Revision 1.7 1999/12/11 11:12:17 mdw * Fix comment formatting error. * @@ -374,16 +377,20 @@ int sel_select(sel_state *s) /* --- Run through the timers --- */ - { + if (s->timers && TV_CMP(&s->timers->tv, <=, &a.now)) { sel_timer *t, *tt; - for (t = s->timers; t && TV_CMP(&t->tv, <=, &a.now); t = tt) { + tt = s->timers; + for (t = tt; t && TV_CMP(&t->tv, <=, &a.now); t = t->next) + ; + if (t) { + t->prev->next = 0; + t->prev = (sel_timer *)&s->timers; + } + s->timers = t; + for (t = tt; t; t = tt) { tt = t->next; - t->next = t->prev = t; t->func(&a.now, t->p); } - s->timers = t; - if (t) - t->prev = (sel_timer *)&s->timers; } /* --- And finally run through the files --- * -- [mdw]