From: Marc-André Lureau <marcandre.lureau@redhat.com>
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 <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
include/qemu/module.h | 2 +-
util/module.c | 14 +++++++++++---
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/include/qemu/module.h b/include/qemu/module.h
index db30653..65ba596 100644
--- a/include/qemu/module.h
+++ b/include/qemu/module.h
@@ -65,6 +65,6 @@ void register_module_init(void (*fn)(void), module_init_type type);
void register_dso_module_init(void (*fn)(void), module_init_type type);
void module_call_init(module_init_type type);
-void module_load_one(const char *prefix, const char *lib_name);
+bool module_load_one(const char *prefix, const char *lib_name);
#endif
diff --git a/util/module.c b/util/module.c
index ca9885c..e9fe3e5 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;
}
--
1.8.3.1