From 0f58e137ff493ab38d2a7e6e2d5e5bc85951be3d Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Wed, 19 Dec 2018 00:15:37 +0100
Subject: Avoided a memory leak with the new implementation of constant values.

---
 plugins/pychrysalide/constval.c | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/plugins/pychrysalide/constval.c b/plugins/pychrysalide/constval.c
index 7067770..ab5b81f 100644
--- a/plugins/pychrysalide/constval.c
+++ b/plugins/pychrysalide/constval.c
@@ -26,6 +26,7 @@
 
 
 #include <longintrepr.h>
+#include <malloc.h>
 #include <string.h>
 
 
@@ -56,6 +57,9 @@ typedef struct _PyConstvalObject
 /* Interdit la création d'une instance depuis Python. */
 static PyObject *py_constval_new(PyTypeObject *, PyObject *, PyObject *);
 
+/* Libère la mémoire occupée par la description en sortie. */
+static void py_constval_finalize(PyObject *);
+
 /* Calcule l'emplacement reservé pour une désignation de valeur. */
 static char **py_constval_compute_name_ptr(PyConstvalObject *);
 
@@ -102,6 +106,32 @@ static PyObject *py_constval_new(PyTypeObject *type, PyObject *args, PyObject *k
 *                                                                             *
 *  Paramètres  : self = valeur constante C convertie en Python.               *
 *                                                                             *
+*  Description : Libère la mémoire occupée par la description en sortie.      *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void py_constval_finalize(PyObject *self)
+{
+    PyConstvalObject *constval;             /* Autre version de l'objet    */
+    char **ptr;                             /* Désignation à convertir     */
+
+    constval = (PyConstvalObject *)self;
+
+    ptr = py_constval_compute_name_ptr(constval);
+
+    free(*ptr);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self = valeur constante C convertie en Python.               *
+*                                                                             *
 *  Description : Calcule l'emplacement reservé pour une désignation de valeur.*
 *                                                                             *
 *  Retour      : Pointeur vers l'adresse de désignation.                      *
@@ -231,7 +261,7 @@ PyTypeObject *get_python_py_constval_type(void)
 
         .tp_str         = py_constval_str,
 
-        .tp_flags       = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+        .tp_flags       = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_FINALIZE,
 
         .tp_doc         = "PyChrysalide object for C constant values",
 
@@ -241,6 +271,8 @@ PyTypeObject *get_python_py_constval_type(void)
 
         .tp_new         = py_constval_new,
 
+        .tp_finalize    = py_constval_finalize,
+
     };
 
     return &py_constval_type;
-- 
cgit v0.11.2-87-g4458