Fix a division-by-zero when +RTS -V0 is given
authorIan Lynagh <igloo@earth.li>
Sat, 26 Apr 2008 18:43:55 +0000 (18:43 +0000)
committerIan Lynagh <igloo@earth.li>
Sat, 26 Apr 2008 18:43:55 +0000 (18:43 +0000)
In delayzh_fast we act as if tickInterval was 50, not 0.

rts/PrimOps.cmm

index 6c3593e..c3ab788 100644 (file)
@@ -2118,7 +2118,11 @@ delayzh_fast
     W_ time;
     W_ divisor;
     (time) = foreign "C" getourtimeofday() [R1];
-    divisor = TO_W_(RtsFlags_MiscFlags_tickInterval(RtsFlags))*1000;
+    divisor = TO_W_(RtsFlags_MiscFlags_tickInterval(RtsFlags));
+    if (divisor == 0) {
+        divisor = 50;
+    }
+    divisor = divisor * 1000;
     target = ((R1 + divisor - 1) / divisor) /* divide rounding up */
            + time + 1; /* Add 1 as getourtimeofday rounds down */
     StgTSO_block_info(CurrentTSO) = target;