Index: src/time/clock.c
===================================================================
--- src/time/clock.c	(revision 76cec1e21a9510de8780a546f59799bc82003d87)
+++ src/time/clock.c	(revision de25b6f1041f235871f2c6ea0830caa7be2d4449)
@@ -85,4 +85,6 @@
 
 	if (THREAD) {
+		__u64 ticks;
+		
 		spinlock_lock(&CPU->lock);
 		CPU->needs_relink++;
@@ -90,10 +92,10 @@
 	
 		spinlock_lock(&THREAD->lock);
-		if (!THREAD->ticks--) {
-			spinlock_unlock(&THREAD->lock);
+		if (ticks = THREAD->ticks)
+			THREAD->ticks--;
+		spinlock_unlock(&THREAD->lock);
+		
+		if (!ticks && !PREEMPTION_DISABLED) {
 			scheduler();
-		}
-		else {
-			spinlock_unlock(&THREAD->lock);
 		}
 	}
