Commit 31d797eb authored by Simon Marlow's avatar Simon Marlow

Fix #2848: avoid overflow during time calculation

parent 7fbdd9e0
......@@ -264,7 +264,8 @@ getourtimeofday(void)
interval = RtsFlags.MiscFlags.tickInterval;
if (interval == 0) { interval = 50; }
gettimeofday(&tv, (struct timezone *) NULL);
// cast to lnat because nat may be 64 bit when int is only 32 bit
return ((lnat)tv.tv_sec * 1000 / interval +
(lnat)tv.tv_usec / (interval * 1000));
// Avoid overflow when we multiply seconds by 1000. See #2848
return (lnat)((StgWord64)tv.tv_sec * 1000 / interval +
(StgWord64)tv.tv_usec / (interval * 1000));
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment