summaryrefslogtreecommitdiff
path: root/plugins/pychrysalide/pychrysa.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2019-02-09 13:01:58 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2019-02-09 13:01:58 (GMT)
commit5863af232b8fc57de210702afe659a7383bb8840 (patch)
tree18e6fd0fb7be2f01d23cda34f8d7b3f29b1a250b /plugins/pychrysalide/pychrysa.c
parent32bef30025f5e3f513c2b4936c0573cc3b629961 (diff)
Fixed another batch of memory leaks.
Diffstat (limited to 'plugins/pychrysalide/pychrysa.c')
-rw-r--r--plugins/pychrysalide/pychrysa.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/plugins/pychrysalide/pychrysa.c b/plugins/pychrysalide/pychrysa.c
index 4cb18d9..3e14add 100644
--- a/plugins/pychrysalide/pychrysa.c
+++ b/plugins/pychrysalide/pychrysa.c
@@ -306,13 +306,22 @@ static bool set_version_for_gtk_namespace(const char *version)
static void PyExit_pychrysalide(void)
{
+ assert(_standalone);
+
extern void set_current_project(void *project);
set_current_project(NULL);
#ifdef TRACK_GOBJECT_LEAKS
- if (_standalone)
- dump_remaining_gtypes();
+ remember_gtypes_for_leaks();
+#endif
+
+ exit_all_plugins();
+
+ unload_all_basic_components();
+
+#ifdef TRACK_GOBJECT_LEAKS
+ dump_remaining_gtypes();
#endif
}
@@ -500,7 +509,12 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)
load_remaning_plugins();
- g_object_unref(G_OBJECT(self));
+ /**
+ * On laisse fuir ici la référence sur self afin d'avoir
+ * l'assurance que le greffon se déchargera toujours en dernier.
+ *
+ * La fuite mémoire est au final évitée dans PyExit_pychrysalide().
+ */
}
@@ -657,6 +671,8 @@ static void load_python_plugins(GPluginModule *plugin)
}
+ free(paths);
+
}
@@ -737,6 +753,8 @@ G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin)
G_MODULE_EXPORT void chrysalide_plugin_exit(GPluginModule *plugin)
{
+ clear_all_accesses_to_python_modules();
+
Py_XDECREF(_chrysalide_module);
}