xref: /minix3/minix/lib/libtimers/tmrs_exp.c (revision cfd712b4245f67a5631cc14e950ce43b18455602)
1*cfd712b4SDavid van Moolenbroek #include <minix/timers.h>
2433d6423SLionel Sambuc 
3*cfd712b4SDavid van Moolenbroek /*
4*cfd712b4SDavid van Moolenbroek  * Use the current time to check the timers queue list for expired timers.
5433d6423SLionel Sambuc  * Run the watchdog functions for all expired timers and deactivate them.
6433d6423SLionel Sambuc  * The caller is responsible for scheduling a new alarm if needed.
7433d6423SLionel Sambuc  */
8*cfd712b4SDavid van Moolenbroek int
tmrs_exptimers(minix_timer_t ** tmrs,clock_t now,clock_t * new_head)9*cfd712b4SDavid van Moolenbroek tmrs_exptimers(minix_timer_t ** tmrs, clock_t now, clock_t * new_head)
10*cfd712b4SDavid van Moolenbroek {
11433d6423SLionel Sambuc 	minix_timer_t *tp;
12*cfd712b4SDavid van Moolenbroek 	tmr_func_t func;
13433d6423SLionel Sambuc 
14*cfd712b4SDavid van Moolenbroek 	while ((tp = *tmrs) != NULL && tmr_has_expired(tp, now)) {
15433d6423SLionel Sambuc 		*tmrs = tp->tmr_next;
16*cfd712b4SDavid van Moolenbroek 
17*cfd712b4SDavid van Moolenbroek 		func = tp->tmr_func;
18*cfd712b4SDavid van Moolenbroek 		tp->tmr_func = NULL;
19*cfd712b4SDavid van Moolenbroek 
20*cfd712b4SDavid van Moolenbroek 		(*func)(tp->tmr_arg);
21433d6423SLionel Sambuc 	}
22433d6423SLionel Sambuc 
23*cfd712b4SDavid van Moolenbroek 	if (*tmrs != NULL) {
24*cfd712b4SDavid van Moolenbroek 		if (new_head != NULL)
25433d6423SLionel Sambuc 			*new_head = (*tmrs)->tmr_exp_time;
26*cfd712b4SDavid van Moolenbroek 		return TRUE;
27*cfd712b4SDavid van Moolenbroek 	} else
28*cfd712b4SDavid van Moolenbroek 		return FALSE;
29433d6423SLionel Sambuc }
30