Skip to content

Commit

Permalink
SubscriptionInterval: ensure _last_update is never before timer start
Browse files Browse the repository at this point in the history
The stamp stays 0 if subscriptions are initialized less than the interval time after boot instead of wrapping the unsigned timestamp.
  • Loading branch information
MaEtUgR committed Jul 10, 2024
1 parent 419652b commit 5419d01
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions platforms/common/uORB/SubscriptionInterval.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,13 @@ class SubscriptionInterval
{
if (_subscription.copy(dst)) {
const hrt_abstime now = hrt_absolute_time();
// shift last update time forward, but don't let it get further behind than the interval
_last_update = math::constrain(_last_update + _interval_us, now - _interval_us, now);

// make sure we don't set a timestamp before the timer started counting (now - _interval_us would wrap because it's unsigned)
if (now > _interval_us) {
// shift last update time forward, but don't let it get further behind than the interval
_last_update = math::constrain(_last_update + _interval_us, now - _interval_us, now);
}

return true;
}

Expand Down Expand Up @@ -160,7 +165,7 @@ class SubscriptionInterval
protected:

Subscription _subscription;
uint64_t _last_update{0}; // last update in microseconds
uint64_t _last_update{0}; // last subscription update in microseconds
uint32_t _interval_us{0}; // maximum update interval in microseconds

};
Expand Down

0 comments on commit 5419d01

Please sign in to comment.