time: fix timer stop
Due to data structure corruption,
some timers could not be removed.
Fixes #2495.

R=golang-dev, adg
CC=golang-dev, mdbrown
https://golang.org/cl/5437060
diff --git a/src/pkg/runtime/time.goc b/src/pkg/runtime/time.goc
index 23ad1aa..ad9f3aa 100644
--- a/src/pkg/runtime/time.goc
+++ b/src/pkg/runtime/time.goc
@@ -133,9 +133,16 @@
 		return false;
 	}
 
-	timers.t[i] = timers.t[--timers.len];
-	siftup(i);
-	siftdown(i);
+	timers.len--;
+	if(i == timers.len) {
+		timers.t[i] = nil;
+	} else {
+		timers.t[i] = timers.t[timers.len];
+		timers.t[timers.len] = nil;
+		timers.t[i]->i = i;
+		siftup(i);
+		siftdown(i);
+	}
 	runtime·unlock(&timers);
 	return true;
 }