shithub: riscv

Download patch

ref: 8ebe3f680e9f343a13bfcaaa2e17745b701ec0c8
parent: d1be5e163c98c99b3b610dc5f4715455d506ba22
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Thu Jan 2 20:40:17 EST 2014

alarm: skip timed out alarms when inserting in procalarm() (thanks erik)

from erik quanstros 9fans post:

i think the list insertion code needs a single-read
test that f->alarm != 0. to prevent the 0 from
acting like a fencepost.  e.g. trying to insert -10 into
list -40 -30 0 -20.

	if(alarms.head) {
		l = &alarms.head;
		for(f = *l; f; f = f->palarm) {
>>			fw = f->alarm;
>>			if(fw != 0 && (long)(fw - when) >= 0) {
				up->palarm = f;
				*l = up;
				goto done;
			}
			l = &f->palarm;
		}
		*l = up;
	}

--- a/sys/src/9/port/alarm.c
+++ b/sys/src/9/port/alarm.c
@@ -88,7 +88,8 @@
 	if(alarms.head) {
 		l = &alarms.head;
 		for(f = *l; f; f = f->palarm) {
-			if((long)(f->alarm - when) >= 0) {
+			time = f->alarm;
+			if(time != 0 && (long)(time - when) >= 0) {
 				up->palarm = f;
 				*l = up;
 				goto done;
--