Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2008-06-06 15:00:32 +0400
committerCampbell Barton <ideasman42@gmail.com>2008-06-06 15:00:32 +0400
commitb62955cf3ea9a5e0f47ee93291820e5b60870b4b (patch)
tree9c68fccc81830fa762520c55fa8831a42e02f23e /source/blender/python
parent14393c9ffbe67eb41281fcc50f8a0ff44e4fe0fc (diff)
bugfix, memory leaks when getting particles and particle system loc/size/rot/life (Just remember PyList_Append adds a reference! :) )
Diffstat (limited to 'source/blender/python')
-rw-r--r--source/blender/python/api2_2x/Object.c2
-rw-r--r--source/blender/python/api2_2x/Particle.c14
2 files changed, 14 insertions, 2 deletions
diff --git a/source/blender/python/api2_2x/Object.c b/source/blender/python/api2_2x/Object.c
index 3db9664d47d..45cce46d389 100644
--- a/source/blender/python/api2_2x/Object.c
+++ b/source/blender/python/api2_2x/Object.c
@@ -1056,10 +1056,12 @@ PyObject *Object_getParticleSys( BPy_Object * self ){
/* fixme: for(;;) */
current = ParticleSys_CreatePyObject( blparticlesys, ob );
PyList_Append(partsyslist,current);
+ Py_DECREF(current);
while((blparticlesys = blparticlesys->next)){
current = ParticleSys_CreatePyObject( blparticlesys, ob );
PyList_Append(partsyslist,current);
+ Py_DECREF(current);
}
return partsyslist;
diff --git a/source/blender/python/api2_2x/Particle.c b/source/blender/python/api2_2x/Particle.c
index f0a32db0623..95de9757b87 100644
--- a/source/blender/python/api2_2x/Particle.c
+++ b/source/blender/python/api2_2x/Particle.c
@@ -854,7 +854,7 @@ static PyObject *Part_GetLoc( BPy_PartSys * self, PyObject * args ){
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
"Couldn't append item to PyList" );
}
-
+ Py_DECREF(loc); /* PyList_Append increfs */
path++;
}
@@ -864,6 +864,7 @@ static PyObject *Part_GetLoc( BPy_PartSys * self, PyObject * args ){
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
"Couldn't append item to PyList" );
}
+ Py_DECREF(seglist); /* PyList_Append increfs */
}
cache=psys->childcache;
@@ -885,7 +886,7 @@ static PyObject *Part_GetLoc( BPy_PartSys * self, PyObject * args ){
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
"Couldn't append item to PyList" );
}
-
+ Py_DECREF(loc);/* PyList_Append increfs */
path++;
}
@@ -895,6 +896,7 @@ static PyObject *Part_GetLoc( BPy_PartSys * self, PyObject * args ){
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
"Couldn't append item to PyList" );
}
+ Py_DECREF(seglist); /* PyList_Append increfs */
}
} else {
@@ -933,6 +935,7 @@ static PyObject *Part_GetLoc( BPy_PartSys * self, PyObject * args ){
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
"Couldn't append item to PyList" );
}
+ Py_DECREF(loc);/* PyList_Append increfs */
}
else {
if ( all ){
@@ -941,6 +944,7 @@ static PyObject *Part_GetLoc( BPy_PartSys * self, PyObject * args ){
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
"Couldn't append item to PyList" );
}
+ Py_DECREF(Py_None); /* PyList_Append increfs */
}
}
}
@@ -985,6 +989,7 @@ static PyObject *Part_GetRot( BPy_PartSys * self, PyObject * args ){
if(psys_get_particle_state(ob,psys,i,&state,0)==0){
if ( all ){
PyList_Append(partlist,Py_None);
+ Py_DECREF(Py_None); /* PyList_Append increfs */
continue;
} else {
continue;
@@ -1001,6 +1006,7 @@ static PyObject *Part_GetRot( BPy_PartSys * self, PyObject * args ){
if (id)
PyTuple_SetItem(loc,4,PyInt_FromLong(i));
PyList_Append(partlist,loc);
+ Py_DECREF(loc); /* PyList_Append increfs */
}
}
return partlist;
@@ -1060,9 +1066,11 @@ static PyObject *Part_GetSize( BPy_PartSys * self, PyObject * args ){
PyTuple_SetItem(tuple,0,PyFloat_FromDouble((double)size));
PyTuple_SetItem(tuple,1,PyInt_FromLong(i));
PyList_Append(partlist,tuple);
+ Py_DECREF(tuple);
} else {
siz = PyFloat_FromDouble((double)size);
PyList_Append(partlist,siz);
+ Py_DECREF(siz);
}
}
}
@@ -1125,9 +1133,11 @@ static PyObject *Part_GetAge( BPy_PartSys * self, PyObject * args ){
PyTuple_SetItem(tuple,0,PyFloat_FromDouble((double)life));
PyTuple_SetItem(tuple,1,PyInt_FromLong(i));
PyList_Append(partlist,tuple);
+ Py_DECREF(tuple);
} else {
lif = PyFloat_FromDouble((double)life);
PyList_Append(partlist,lif);
+ Py_DECREF(lif);
}
}
}