Timestamp: Prevent integer overflow on Darwin PPC 32-bit #511
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
A Darwin PPC 32-bit user observes huge values
numer == 1000000000
anddenom == 18431683
returned frommach_timebase_info()
. For these values,mach_absolute_time() * numer
overflowsuint64_t
every 1000.82 seconds, and1000000 * denom
always overflowsuint32_t
, with the effect of making time run backwards at -11190660 times its usual speed.This bug was masked on Darwin x86 64-bit, where
numer == denom == 1
.Fix it by doing the conversion with
double
arithmetic instead.Closes #479.