From 6a9390c5e4039c76f7348bc241de6df01c509cc0 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Thu, 16 Jan 2025 23:36:55 +0100
Subject: Handle plugin destruction with more care.

---
 src/plugins/plugin.c | 31 +++++++++++++++++++------------
 1 file 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)
     {
-- 
cgit v0.11.2-87-g4458