xref: /inferno-os/os/port/alarm.c (revision 7ef44d652ae9e5e1f5b3465d73684e4a54de73c0)
1 #include	"u.h"
2 #include	"../port/lib.h"
3 #include	"mem.h"
4 #include	"dat.h"
5 #include	"fns.h"
6 
7 Talarm	talarm;
8 
9 /*
10  *  called every clock tick
11  */
12 void
13 checkalarms(void)
14 {
15 	Proc *p;
16 	ulong now;
17 
18 	now = MACHP(0)->ticks;
19 
20 	if(talarm.list == 0 || canlock(&talarm) == 0)
21 		return;
22 
23 	for(;;) {
24 		p = talarm.list;
25 		if(p == 0)
26 			break;
27 
28 		if(p->twhen == 0) {
29 			talarm.list = p->tlink;
30 			p->trend = 0;
31 			continue;
32 		}
33 		if(now < p->twhen)
34 			break;
35 		wakeup(p->trend);
36 		talarm.list = p->tlink;
37 		p->trend = 0;
38 	}
39 
40 	unlock(&talarm);
41 }
42