Commit 81d8ccb1 authored by Marc-André Lureau's avatar Marc-André Lureau Committed by Paolo Bonzini
Browse files

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: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 90629122
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+11 −3
Original line number Diff line number Diff line
@@ -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;
}