From 42967df63f3ff62af1f346377db0ed78eb49b5aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Thu, 16 Feb 2017 17:40:16 +0100 Subject: [PATCH] param command: use param_* calls even if flash-based params are enabled This will ensure proper locking. --- .../systemlib/flashparams/flashparams.c | 7 +---- .../systemlib/flashparams/flashparams.h | 3 +- src/modules/systemlib/param/param.c | 17 +++++++++-- src/systemcmds/param/param.c | 29 ++++++++----------- 4 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/modules/systemlib/flashparams/flashparams.c b/src/modules/systemlib/flashparams/flashparams.c index 3fd1042076..28d96dcbe0 100644 --- a/src/modules/systemlib/flashparams/flashparams.c +++ b/src/modules/systemlib/flashparams/flashparams.c @@ -342,11 +342,6 @@ int flash_param_save(void) } -int flash_param_save_default(void) -{ - return param_export_internal(false); -} - int flash_param_load(void) { @@ -356,5 +351,5 @@ int flash_param_load(void) int flash_param_import(void) { - return 0; + return -1; } diff --git a/src/modules/systemlib/flashparams/flashparams.h b/src/modules/systemlib/flashparams/flashparams.h index 8300669bd4..195a18fce7 100644 --- a/src/modules/systemlib/flashparams/flashparams.h +++ b/src/modules/systemlib/flashparams/flashparams.h @@ -64,9 +64,8 @@ __EXPORT extern UT_array *param_values; __EXPORT int param_set_external(param_t param, const void *val, bool mark_saved, bool notify_changes, bool is_saved); __EXPORT const void *param_get_value_ptr_external(param_t param); -/* The interface hooks to the Flash based storage */ +/* The interface hooks to the Flash based storage. The caller is responsible for locking */ __EXPORT int flash_param_save(void); -__EXPORT int flash_param_save_default(void); __EXPORT int flash_param_load(void); __EXPORT int flash_param_import(void); __END_DECLS diff --git a/src/modules/systemlib/param/param.c b/src/modules/systemlib/param/param.c index 7241357b06..f0019b0a76 100644 --- a/src/modules/systemlib/param/param.c +++ b/src/modules/systemlib/param/param.c @@ -803,7 +803,9 @@ param_save_default(void) PARAM_CLOSE(fd); #else + param_lock(); res = flash_param_save(); + param_unlock(); #endif return res; } @@ -814,7 +816,8 @@ param_save_default(void) int param_load_default(void) { - warnx("param_load_default\n"); + int res = 0; +#if !defined(FLASH_BASED_PARAMS) int fd_load = PARAM_OPEN(param_get_default_file(), O_RDONLY); if (fd_load < 0) { @@ -835,7 +838,11 @@ param_load_default(void) return -2; } - return 0; +#else + // no need for locking + res = flash_param_load(); +#endif + return res; } static void @@ -1134,7 +1141,13 @@ out: int param_import(int fd) { +#if !defined(FLASH_BASED_PARAMS) return param_import_internal(fd, false); +#else + (void)fd; // unused + // no need for locking here + return flash_param_import(); +#endif } int diff --git a/src/systemcmds/param/param.c b/src/systemcmds/param/param.c index 4b2e8b5af4..4f35ed2438 100644 --- a/src/systemcmds/param/param.c +++ b/src/systemcmds/param/param.c @@ -236,31 +236,26 @@ param_main(int argc, char *argv[]) } #if defined(FLASH_BASED_PARAMS) -/* If flash based parameters are uses we call out - * to the following set of flash routines +/* If flash based parameters are uses we have to change some of the calls to the + * default param calls, which will in turn take care of locking and calling to the + * flash backend. */ static int - do_save(const char *param_file_name) { - return flash_param_save(); -} -static int -do_save_default(void) -{ - return flash_param_save_default(); + return param_save_default(); } static int do_load(const char *param_file_name) { - return flash_param_load(); + return param_load_default(); } static int do_import(const char *param_file_name) { - return flash_param_import(); + return param_import(-1); } #else @@ -289,12 +284,6 @@ do_save(const char *param_file_name) return 0; } -static int -do_save_default(void) -{ - return param_save_default(); -} - static int do_load(const char *param_file_name) { @@ -338,6 +327,12 @@ do_import(const char *param_file_name) } #endif +static int +do_save_default(void) +{ + return param_save_default(); +} + static int do_show(const char *search_string) {