[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15147] trunk/blender/source/blender/ python/api2_2x: bugfix, memory leaks when getting particles and particle system loc/size/rot/life (Just remember PyList_Append adds a reference! :) )

Campbell Barton ideasman42 at gmail.com
Fri Jun 6 13:00:34 CEST 2008


Revision: 15147
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15147
Author:   campbellbarton
Date:     2008-06-06 13:00:32 +0200 (Fri, 06 Jun 2008)

Log Message:
-----------
bugfix, memory leaks when getting particles and particle system loc/size/rot/life (Just remember PyList_Append adds a reference! :) )

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/Object.c
    trunk/blender/source/blender/python/api2_2x/Particle.c

Modified: trunk/blender/source/blender/python/api2_2x/Object.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Object.c	2008-06-06 08:58:08 UTC (rev 15146)
+++ trunk/blender/source/blender/python/api2_2x/Object.c	2008-06-06 11:00:32 UTC (rev 15147)
@@ -1056,10 +1056,12 @@
 /* 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;

Modified: trunk/blender/source/blender/python/api2_2x/Particle.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Particle.c	2008-06-06 08:58:08 UTC (rev 15146)
+++ trunk/blender/source/blender/python/api2_2x/Particle.c	2008-06-06 11:00:32 UTC (rev 15147)
@@ -854,7 +854,7 @@
 					return EXPP_ReturnPyObjError( PyExc_RuntimeError,
 							"Couldn't append item to PyList" );
 				}
-
+				Py_DECREF(loc); /* PyList_Append increfs */
 				path++;
 			}
 
@@ -864,6 +864,7 @@
 				return EXPP_ReturnPyObjError( PyExc_RuntimeError,
 						"Couldn't append item to PyList" );		
 			}
+			Py_DECREF(seglist); /* PyList_Append increfs */
 		}
 
 		cache=psys->childcache;
@@ -885,7 +886,7 @@
 					return EXPP_ReturnPyObjError( PyExc_RuntimeError,
 							"Couldn't append item to PyList" );
 				}
-
+				Py_DECREF(loc);/* PyList_Append increfs */
 				path++;
 			}
 
@@ -895,6 +896,7 @@
 				return EXPP_ReturnPyObjError( PyExc_RuntimeError,
 						"Couldn't append item to PyList" );	
 			}
+			Py_DECREF(seglist); /* PyList_Append increfs */
 		}
 		
 	} else {
@@ -933,6 +935,7 @@
 					return EXPP_ReturnPyObjError( PyExc_RuntimeError,
 								"Couldn't append item to PyList" );
 				}
+				Py_DECREF(loc);/* PyList_Append increfs */
 			}
 			else {
 				if ( all ){
@@ -941,6 +944,7 @@
 						return EXPP_ReturnPyObjError( PyExc_RuntimeError,
 									"Couldn't append item to PyList" );
 					}
+					Py_DECREF(Py_None); /* PyList_Append increfs */
 				}
 			}
 		}
@@ -985,6 +989,7 @@
 			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 @@
 			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 @@
 				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 @@
 				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);
 			}
 		}
 	}





More information about the Bf-blender-cvs mailing list