diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-12-18 23:15:37 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-12-18 23:15:37 (GMT) |
commit | 0f58e137ff493ab38d2a7e6e2d5e5bc85951be3d (patch) | |
tree | e2d251a91f61e0e04da0048fa187e5daf9f2c8f3 | |
parent | 6c6c743daf3c1de391c9ff2586a7df60bd7b7759 (diff) |
Avoided a memory leak with the new implementation of constant values.
-rw-r--r-- | plugins/pychrysalide/constval.c | 34 |
1 files changed, 33 insertions, 1 deletions
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; |