uORB: fix TSAN issues using atomics

This commit is contained in:
Julian Oes
2026-02-18 12:43:02 +13:00
parent 91e25df7c4
commit 22a32eaa55
13 changed files with 92 additions and 75 deletions
@@ -163,8 +163,10 @@ public:
void call() override
{
// schedule immediately if updated (queue depth or subscription interval)
if ((_required_updates == 0)
|| (Manager::updates_available(_subscription.get_node(), _subscription.get_last_generation()) >= _required_updates)) {
uint8_t req = _required_updates.load();
if ((req == 0)
|| (Manager::updates_available(_subscription.get_node(), _subscription.get_last_generation()) >= req)) {
if (updated()) {
_work_item->ScheduleNow();
}
@@ -179,13 +181,13 @@ public:
void set_required_updates(uint8_t required_updates)
{
// TODO: constrain to queue depth?
_required_updates = required_updates;
_required_updates.store(required_updates);
}
private:
px4::WorkItem *_work_item;
uint8_t _required_updates{0};
px4::atomic<uint8_t> _required_updates{0};
};
} // namespace uORB