mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-23 22:58:10 +08:00
parameters: find and get perf counters aren't threadsafe
This commit is contained in:
@@ -227,8 +227,8 @@ param_init()
|
||||
px4_sem_init(&reader_lock_holders_lock, 0, 1);
|
||||
|
||||
param_export_perf = perf_alloc(PC_ELAPSED, "param_export");
|
||||
param_find_perf = perf_alloc(PC_ELAPSED, "param_find");
|
||||
param_get_perf = perf_alloc(PC_ELAPSED, "param_get");
|
||||
param_find_perf = perf_alloc(PC_COUNT, "param_find");
|
||||
param_get_perf = perf_alloc(PC_COUNT, "param_get");
|
||||
param_set_perf = perf_alloc(PC_ELAPSED, "param_set");
|
||||
}
|
||||
|
||||
@@ -318,7 +318,7 @@ param_notify_changes()
|
||||
param_t
|
||||
param_find_internal(const char *name, bool notification)
|
||||
{
|
||||
perf_begin(param_find_perf);
|
||||
perf_count(param_find_perf);
|
||||
|
||||
param_t middle;
|
||||
param_t front = 0;
|
||||
@@ -350,8 +350,6 @@ param_find_internal(const char *name, bool notification)
|
||||
}
|
||||
}
|
||||
|
||||
perf_end(param_find_perf);
|
||||
|
||||
/* not found */
|
||||
return PARAM_INVALID;
|
||||
}
|
||||
@@ -565,21 +563,21 @@ param_get_value_ptr(param_t param)
|
||||
int
|
||||
param_get(param_t param, void *val)
|
||||
{
|
||||
perf_count(param_get_perf);
|
||||
int result = -1;
|
||||
|
||||
param_lock_reader();
|
||||
perf_begin(param_get_perf);
|
||||
if (val) {
|
||||
param_lock_reader();
|
||||
const void *v = param_get_value_ptr(param);
|
||||
|
||||
const void *v = param_get_value_ptr(param);
|
||||
if (v) {
|
||||
memcpy(val, v, param_size(param));
|
||||
result = 0;
|
||||
}
|
||||
|
||||
if (val && v) {
|
||||
memcpy(val, v, param_size(param));
|
||||
result = 0;
|
||||
param_unlock_reader();
|
||||
}
|
||||
|
||||
perf_end(param_get_perf);
|
||||
param_unlock_reader();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -973,11 +971,11 @@ int param_save_default()
|
||||
const char *filename = param_get_default_file();
|
||||
|
||||
if (!filename) {
|
||||
perf_begin(param_export_perf);
|
||||
param_lock_writer();
|
||||
perf_begin(param_export_perf);
|
||||
res = flash_param_save(false, nullptr);
|
||||
param_unlock_writer();
|
||||
perf_end(param_export_perf);
|
||||
param_unlock_writer();
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user