diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/plugin.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c index 9438f9f..b7f85d5 100644 --- a/src/plugins/plugin.c +++ b/src/plugins/plugin.c @@ -135,29 +135,36 @@ static void g_plugin_module_init(GPluginModule *plugin) static void g_plugin_module_dispose(GPluginModule *plugin) { size_t i; /* Boucle de parcours */ + size_t index; /* Indice de greffon visé */ GPluginModule *dependency; /* Module nécessaire */ GPluginModuleClass *class; /* Classe de l'instance active */ - lock_plugin_list_for_reading(); - - for (i = 0; i < plugin->required_count; i++) + if (plugin->dependencies != NULL) { - dependency = get_plugin_by_name(plugin->required[i], NULL); + lock_plugin_list_for_reading(); - /* Si le chargement a bien été complet avant la sortie... */ - if (dependency != NULL) + for (i = 0; i < plugin->required_count; i++) { - /* Un coup pour l'appel à get_plugin_by_name(). */ - unref_object(dependency); + dependency = get_plugin_by_name(plugin->required[i], &index); - /* Un coup pour la dépendance */ - unref_object(dependency); + /* Si la dépendance a bien été pris en compte... */ + if (test_in_bit_field(plugin->dependencies, index)) + { + assert(dependency != NULL); + + /* Un coup pour l'appel à get_plugin_by_name(). */ + unref_object(dependency); + + /* Un coup pour la dépendance */ + unref_object(dependency); + + } } - } + unlock_plugin_list_for_reading(); - unlock_plugin_list_for_reading(); + } if (plugin->flags & PSF_LOADED) { |