parameters: find and get perf counters aren't threadsafe

This commit is contained in:
Daniel Agar
2020-12-01 23:54:59 -05:00
parent e69aea0a9b
commit 378c0b5093
+14 -16
View File
@@ -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;
}