From 81d8ccb1bea4fb9eaaf4c8e30bd4021180a9a39f Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Mon, 22 Jul 2019 17:13:23 +0400 Subject: module: return success on module load Let the caller know of load success. Note that this also changes slightly the behaviour of the function to try loading on subsequent calls if the previous ones failed. Signed-off-by: Marc-André Lureau Signed-off-by: Paolo Bonzini --- util/module.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'util') diff --git a/util/module.c b/util/module.c index ca9885c490..e9fe3e5422 100644 --- a/util/module.c +++ b/util/module.c @@ -156,8 +156,10 @@ out: } #endif -void module_load_one(const char *prefix, const char *lib_name) +bool module_load_one(const char *prefix, const char *lib_name) { + bool success = false; + #ifdef CONFIG_MODULES char *fname = NULL; char *exec_dir; @@ -170,7 +172,7 @@ void module_load_one(const char *prefix, const char *lib_name) if (!g_module_supported()) { fprintf(stderr, "Module is not supported by system.\n"); - return; + return false; } if (!loaded_modules) { @@ -181,7 +183,7 @@ void module_load_one(const char *prefix, const char *lib_name) if (!g_hash_table_add(loaded_modules, module_name)) { g_free(module_name); - return; + return true; } exec_dir = qemu_get_exec_dir(); @@ -205,13 +207,19 @@ void module_load_one(const char *prefix, const char *lib_name) fname = NULL; /* Try loading until loaded a module file */ if (!ret) { + success = true; break; } } + if (!success) { + g_hash_table_remove(loaded_modules, module_name); + } + for (i = 0; i < n_dirs; i++) { g_free(dirs[i]); } #endif + return success; } -- cgit v1.2.3-55-g7522