From 27a113ecab774c73a3fe26b99928a6ea6b06f5e5 Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Fri, 23 Apr 2021 13:38:29 -0400 Subject: [PATCH] parameters: param_get avoid locking if value is static default --- src/lib/parameters/parameters.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/lib/parameters/parameters.cpp b/src/lib/parameters/parameters.cpp index 94f15b3a1d..add193b0cb 100644 --- a/src/lib/parameters/parameters.cpp +++ b/src/lib/parameters/parameters.cpp @@ -493,8 +493,20 @@ param_get(param_t param, void *val) int result = PX4_ERROR; if (val) { - param_lock_reader(); + if (!params_changed[param] && !params_custom_default[param]) { + // if parameter is unchanged (static default value) copy immediately and avoid locking + switch (param_type(param)) { + case PARAM_TYPE_INT32: + memcpy(val, &px4::parameters[param].val.i, sizeof(px4::parameters[param].val.i)); + return PX4_OK; + case PARAM_TYPE_FLOAT: + memcpy(val, &px4::parameters[param].val.f, sizeof(px4::parameters[param].val.f)); + return PX4_OK; + } + } + + param_lock_reader(); const void *v = param_get_value_ptr(param); if (v) {