summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2019-02-03 22:13:40 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2019-02-03 22:20:36 (GMT)
commit9b35b89fce2499d5352f5323baec53abbf9a4af2 (patch)
tree49dde922a235f7d11cc8db63c8e0ac1d26f530e7 /plugins
parent10aa517f3a26dd9e4f96f78e62ba1c87e91c7243 (diff)
Fixed various memory leaks.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/pychrysalide/pychrysa.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/plugins/pychrysalide/pychrysa.c b/plugins/pychrysalide/pychrysa.c
index 928743d..723c2bc 100644
--- a/plugins/pychrysalide/pychrysa.c
+++ b/plugins/pychrysalide/pychrysa.c
@@ -94,6 +94,9 @@ static bool is_current_abi_suitable(void);
/* Définit la version attendue de GTK à charger dans Python. */
static bool set_version_for_gtk_namespace(const char *);
+/* Point de sortie pour l'initialisation de Python. */
+static void PyExit_pychrysalide(void);
+
/* Complète les chemins de recherches de Python. */
static void extend_python_path(const char *);
@@ -292,6 +295,27 @@ static bool set_version_for_gtk_namespace(const char *version)
* *
* Paramètres : - *
* *
+* Description : Point de sortie pour l'initialisation de Python. *
+* *
+* Retour : ? *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void PyExit_pychrysalide(void)
+{
+ extern void set_current_project(void *project);
+
+ set_current_project(NULL);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : - *
+* *
* Description : Point d'entrée pour l'initialisation de Python. *
* *
* Retour : ? *
@@ -316,6 +340,7 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)
{
PyObject *result; /* Module Python à retourner */
bool status; /* Bilan des inclusions */
+ int ret; /* Bilan de préparatifs */
GPluginModule *self; /* Représentation interne */
PluginStatusFlags self_flags; /* Fanions à mettre à jour */
@@ -427,12 +452,20 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)
if (!status)
{
- PyErr_SetString(PyExc_SystemError, "fail to load all PyChrysalide components.");
+ PyErr_SetString(PyExc_SystemError, "failed to load all PyChrysalide components.");
return NULL;
}
if (_standalone)
{
+ ret = Py_AtExit(PyExit_pychrysalide);
+
+ if (ret == -1)
+ {
+ PyErr_SetString(PyExc_SystemError, "failed to register a cleanup function.");
+ return NULL;
+ }
+
/**
* Comme les sources locales sont prioritaires, le fichier "core/global.h"
* du greffon masque la fonction suivante, issue du corps principal du