summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-12-18 23:15:37 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-12-18 23:15:37 (GMT)
commit0f58e137ff493ab38d2a7e6e2d5e5bc85951be3d (patch)
treee2d251a91f61e0e04da0048fa187e5daf9f2c8f3
parent6c6c743daf3c1de391c9ff2586a7df60bd7b7759 (diff)
Avoided a memory leak with the new implementation of constant values.
-rw-r--r--plugins/pychrysalide/constval.c34
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;