diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-05-21 19:31:41 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-05-21 19:31:41 +0200 |
commit | 92b550d665b3d6042f3a31241649d2142f6b8f91 (patch) | |
tree | e13a2936faca98c13f9cc5d006dba2c4099b2898 | |
parent | f6833ce42841f25799ecbde8b847b30bfe6241a6 (diff) |
kernel: prevent alarm(2) from returning instantly when the tick timer wraps. (from erik quanstros alarmwrap patch)
-rw-r--r-- | sys/src/9/port/alarm.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/src/9/port/alarm.c b/sys/src/9/port/alarm.c index ea4d4e653..fb607523b 100644 --- a/sys/src/9/port/alarm.c +++ b/sys/src/9/port/alarm.c @@ -16,7 +16,7 @@ alarmkproc(void*) for(;;){ now = MACHP(0)->ticks; qlock(&alarms); - while((rp = alarms.head) && rp->alarm <= now){ + while((rp = alarms.head) && (long)(now - rp->alarm) >= 0){ if(rp->alarm != 0L){ if(canqlock(&rp->debug)){ if(!waserror()){ @@ -48,7 +48,7 @@ checkalarms(void) p = alarms.head; now = MACHP(0)->ticks; - if(p && p->alarm <= now) + if(p != nil && (long)(now - p->alarm) >= 0) wakeup(&alarmr); } @@ -67,6 +67,8 @@ procalarm(ulong time) return old; } when = ms2tk(time)+MACHP(0)->ticks; + if(when == 0) + when = 1; qlock(&alarms); l = &alarms.head; @@ -82,7 +84,7 @@ procalarm(ulong time) if(alarms.head) { l = &alarms.head; for(f = *l; f; f = f->palarm) { - if(f->alarm > when) { + if((long)(f->alarm - when) >= 0) { up->palarm = f; *l = up; goto done; |