mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-19 07:13:35 +08:00
drv_hrt: fix TSAN issues
This commit is contained in:
@@ -134,7 +134,10 @@ void hrt_store_absolute_time(volatile hrt_abstime *t)
|
|||||||
*/
|
*/
|
||||||
bool hrt_called(struct hrt_call *entry)
|
bool hrt_called(struct hrt_call *entry)
|
||||||
{
|
{
|
||||||
return (entry->deadline == 0);
|
hrt_lock();
|
||||||
|
bool result = (entry->deadline == 0);
|
||||||
|
hrt_unlock();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -416,12 +419,15 @@ hrt_call_invoke()
|
|||||||
call->deadline = 0;
|
call->deadline = 0;
|
||||||
|
|
||||||
/* invoke the callout (if there is one) */
|
/* invoke the callout (if there is one) */
|
||||||
if (call->callout) {
|
hrt_callout callout = call->callout;
|
||||||
|
void *arg = call->arg;
|
||||||
|
|
||||||
|
if (callout) {
|
||||||
// Unlock so we don't deadlock in callback
|
// Unlock so we don't deadlock in callback
|
||||||
hrt_unlock();
|
hrt_unlock();
|
||||||
|
|
||||||
//PX4_INFO("call %p: %p(%p)", call, call->callout, call->arg);
|
//PX4_INFO("call %p: %p(%p)", call, callout, arg);
|
||||||
call->callout(call->arg);
|
callout(arg);
|
||||||
|
|
||||||
hrt_lock();
|
hrt_lock();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -272,14 +272,14 @@ static inline uint16_t get_latency_bucket_count(void) { return LATENCY_BUCKET_CO
|
|||||||
|
|
||||||
static inline latency_info_t get_latency(uint16_t bucket_idx, uint16_t counter_idx)
|
static inline latency_info_t get_latency(uint16_t bucket_idx, uint16_t counter_idx)
|
||||||
{
|
{
|
||||||
latency_info_t ret = {latency_buckets[bucket_idx], latency_counters[counter_idx]};
|
latency_info_t ret = {latency_buckets[bucket_idx], __atomic_load_n(&latency_counters[counter_idx], __ATOMIC_RELAXED)};
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void reset_latency_counters(void)
|
static inline void reset_latency_counters(void)
|
||||||
{
|
{
|
||||||
for (int i = 0; i <= get_latency_bucket_count(); i++) {
|
for (int i = 0; i <= get_latency_bucket_count(); i++) {
|
||||||
latency_counters[i] = 0;
|
__atomic_store_n(&latency_counters[i], 0, __ATOMIC_RELAXED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user