Replace gettimeofday with clock_gettime(CLOCK_MONOTONIC) - #40
Open
jEsuSdA wants to merge 1 commit into
Open
Conversation
… timers gettimeofday() is wall-clock time and vulnerable to NTP jumps or manual system clock changes. This can cause timers to misbehave (e.g. fade timeouts appearing to run too fast or too slow after a clock adjustment). clock_gettime(CLOCK_MONOTONIC) is guaranteed to never go backwards and is not affected by system time changes, making it the correct clock for measuring elapsed time. Also removes the unused _program_start_secs variable which was initialized to 0 and never set, so the subtraction in get_time_in_milliseconds() was a no-op anyway.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Replaces
gettimeofday()withclock_gettime(CLOCK_MONOTONIC)for all internal timers, fixing a correctness bug where system clock changes could cause fade timeouts and other timers to misbehave.Problem
gettimeofday()returns wall-clock time, which is vulnerable to NTP jumps or manual system clock changes. If the system clock is adjusted while fastcompmgr is running, internal timers (fade timeouts, configure debounce, etc.) can appear to run too fast or too slow, or even hang indefinitely.Solution
clock_gettime(CLOCK_MONOTONIC)is guaranteed to never go backwards and is not affected by system time changes. This is the correct clock for measuring elapsed time.Changes
cm-util.h— replacesgettimeofday()withclock_gettime(CLOCK_MONOTONIC)inget_time_in_milliseconds()cm-util.c— removes the unused_program_start_secsvariable (it was initialized to 0 and never set, so the subtraction was a no-op)cm-util.h— updates#include <sys/time.h>to#include <time.h>Scope
cm-util.handcm-util.conlymake clean && makeproduces zero warnings, zero errorsget_time_in_milliseconds()are unaffectedImpact
Correctness improvement: timers now behave correctly even when the system clock changes. No performance impact —
clock_gettimeis at least as fast asgettimeofdayon modern Linux kernels.