From 0f58e137ff493ab38d2a7e6e2d5e5bc85951be3d Mon Sep 17 00:00:00 2001 From: Cyrille Bagard 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 +#include #include @@ -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