From 39d9bf72c549b2b601e9c78aca7a855cd5af9162 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Thu, 4 Oct 2018 01:22:11 +0200
Subject: Handled missing runtime librairies for Python GObject bindings.

---
 plugins/pychrysalide/pychrysa.c | 17 ++++++++++++++++-
 src/plugins/plugin.c            | 14 +++++++++-----
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/plugins/pychrysalide/pychrysa.c b/plugins/pychrysalide/pychrysa.c
index dd6f576..200bdaa 100644
--- a/plugins/pychrysalide/pychrysa.c
+++ b/plugins/pychrysalide/pychrysa.c
@@ -585,7 +585,22 @@ G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin)
 
     _chrysalide_module = PyImport_ImportModule("pychrysalide");
 
-    result = load_python_plugins(plugin);
+    /**
+     * Pour mémoire, une situation concrête conduisant à un échec :
+     * le paquet python3-gi-dbg n'est pas installé alors que le
+     * programme est compilé en mode débogage.
+     *
+     * Dans ce cas, pygobject_init(-1, -1, -1) échoue, et Py_Initialize()
+     * le laisse rien filtrer...
+     *
+     * En mode autonome, le shell Python remonte bien l'erreur par contre.
+     */
+
+    if (_chrysalide_module == NULL)
+        result = false;
+
+    else
+        result = load_python_plugins(plugin);
 
     PyEval_ReleaseLock();
 
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index d309332..40f44ce 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -127,13 +127,17 @@ static void g_plugin_module_dispose(GPluginModule *plugin)
         for (i = 0; i < pg_iface->required_count; i++)
         {
             dependency = get_plugin_by_name(pg_iface->required[i], NULL);
-            assert(dependency != NULL);
 
-            /* Un coup pour l'appel à get_plugin_by_name(). */
-            g_object_unref(G_OBJECT(dependency));
+            /* Si le chargement a bien été complet avant la sortie... */
+            if (dependency != NULL)
+            {
+                /* Un coup pour l'appel à get_plugin_by_name(). */
+                g_object_unref(G_OBJECT(dependency));
+
+                /* Un coup pour la dépendance */
+                g_object_unref(G_OBJECT(dependency));
 
-            /* Un coup pour la dépendance */
-            g_object_unref(G_OBJECT(dependency));
+            }
 
         }
 
-- 
cgit v0.11.2-87-g4458