Fix T54966: mathutils.noise.voronoi Memory leak
authorBastien Montagne <montagne29@wanadoo.fr>
Mon, 7 May 2018 09:07:11 +0000 (11:07 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Mon, 7 May 2018 09:07:11 +0000 (11:07 +0200)
C code was not correctly handling release of temp data, not technically
a memory leak, but indeed rather annoying bug! ;)

source/blender/python/mathutils/mathutils_noise.c

index 143e51ecfd83d21388f282ab58fe0a5aec9d4eb8..1fb6d306f9678378407be562382909d9fe89e31e 100644 (file)
@@ -731,6 +731,7 @@ static PyObject *M_Noise_voronoi(PyObject *UNUSED(self), PyObject *args)
 {
        PyObject *value;
        PyObject *list;
+       PyObject *ret;
        float vec[3];
        float da[4], pa[12];
        int dtype = 0;
@@ -749,10 +750,14 @@ static PyObject *M_Noise_voronoi(PyObject *UNUSED(self), PyObject *args)
        voronoi(vec[0], vec[1], vec[2], da, pa, me, dtype);
 
        for (i = 0; i < 4; i++) {
-               PyList_SET_ITEM(list, i, Vector_CreatePyObject(pa + 3 * i, 3, NULL));
+               PyObject *v = Vector_CreatePyObject(pa + 3 * i, 3, NULL);
+               PyList_SET_ITEM(list, i, v);
+               Py_DECREF(v);
        }
 
-       return Py_BuildValue("[[ffff]O]", da[0], da[1], da[2], da[3], list);
+       ret = Py_BuildValue("[[ffff]O]", da[0], da[1], da[2], da[3], list);
+       Py_DECREF(list);
+       return ret;
 }
 
 PyDoc_STRVAR(M_Noise_cell_doc,