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 <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
90629122d2
commit
81d8ccb1be
@ -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 register_dso_module_init(void (*fn)(void), module_init_type type);
|
||||||
|
|
||||||
void module_call_init(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
|
#endif
|
||||||
|
@ -156,8 +156,10 @@ out:
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
#ifdef CONFIG_MODULES
|
||||||
char *fname = NULL;
|
char *fname = NULL;
|
||||||
char *exec_dir;
|
char *exec_dir;
|
||||||
@ -170,7 +172,7 @@ void module_load_one(const char *prefix, const char *lib_name)
|
|||||||
|
|
||||||
if (!g_module_supported()) {
|
if (!g_module_supported()) {
|
||||||
fprintf(stderr, "Module is not supported by system.\n");
|
fprintf(stderr, "Module is not supported by system.\n");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!loaded_modules) {
|
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)) {
|
if (!g_hash_table_add(loaded_modules, module_name)) {
|
||||||
g_free(module_name);
|
g_free(module_name);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
exec_dir = qemu_get_exec_dir();
|
exec_dir = qemu_get_exec_dir();
|
||||||
@ -205,13 +207,19 @@ void module_load_one(const char *prefix, const char *lib_name)
|
|||||||
fname = NULL;
|
fname = NULL;
|
||||||
/* Try loading until loaded a module file */
|
/* Try loading until loaded a module file */
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
|
success = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!success) {
|
||||||
|
g_hash_table_remove(loaded_modules, module_name);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < n_dirs; i++) {
|
for (i = 0; i < n_dirs; i++) {
|
||||||
g_free(dirs[i]);
|
g_free(dirs[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user