Correctly reschedule an initially non-recurring timer when a new definite period is specified #105
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.
There is a bug when a timer is rescheduled and transitions from non-recurring to recurring. The bug occurs in the following sequence of operations:
It's possible that this bug was introduced
ntcs::Chronology
was revised to become implemented byntcs::SkipList
: when we update thentcs::Chronology::DeadlineMapEntry
in the skip list (rather than adding a new entry) we do not update the initial period to the new period. It's also possible this bug pre-dated that revision, however.In any case, the current
ntcs::SkipList
-based implementation does not needntcs::Chronology::DeadlineMapEntry::d_period
nord_oneShot
, we can always safely access those fields from the associatedntci::Timer
object itself, which are always written to a read from the samentcs::Chronology::d_mutex
.This PR removes those fields from
ntcs::Chronology::DeadlineMapEntry
and uses the necessary fields directly fromntci::Timer
.