[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20460] branches/blender2.5/blender/source /blender: rna_define.c, RNA_def_struct - set the py_type to NULL when making an rna struct based on another .

Campbell Barton ideasman42 at gmail.com
Thu May 28 04:03:49 CEST 2009


Revision: 20460
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20460
Author:   campbellbarton
Date:     2009-05-28 04:03:48 +0200 (Thu, 28 May 2009)

Log Message:
-----------
rna_define.c, RNA_def_struct - set the py_type to NULL when making an rna struct based on another.
bpy_util.c, PyObSpit - print refcount with PyObject

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_util.c

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c	2009-05-28 01:57:29 UTC (rev 20459)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c	2009-05-28 02:03:48 UTC (rev 20460)
@@ -559,6 +559,7 @@
 		memcpy(srna, srnafrom, sizeof(StructRNA));
 		srna->cont.properties.first= srna->cont.properties.last= NULL;
 		srna->functions.first= srna->functions.last= NULL;
+		srna->py_type= NULL;
 
 		if(DefRNA.preprocess) {
 			srna->base= srnafrom;
@@ -567,7 +568,7 @@
 		else
 			srna->base= srnafrom;
 	}
-
+	
 	srna->identifier= identifier;
 	srna->name= identifier; /* may be overwritten later RNA_def_struct_ui_text */
 	srna->description= "";

Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c	2009-05-28 01:57:29 UTC (rev 20459)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c	2009-05-28 02:03:48 UTC (rev 20460)
@@ -1366,16 +1366,12 @@
 	PyObject *item;
 	
 	Py_INCREF(newclass);
-
-	/* Something fishy is going on here, the pointer is set many times but never free'd
-	 * It also is almost always the same type so it looks like the same point is
-	 * being reused when it should not be - must look into this further */
-#if 0
+	
 	if (RNA_struct_py_type_get(srna))
-		PyObSpit("RNA WAS SET - ", RNA_struct_py_type_get(srna));	
-	Py_XDECREF(RNA_struct_py_type_get(srna)); // TODO - why does this crash???
-#endif
+		PyObSpit("RNA WAS SET - ", RNA_struct_py_type_get(srna));
 	
+	Py_XDECREF(RNA_struct_py_type_get(srna));
+	
 	RNA_struct_py_type_set(srna, (void *)newclass); /* Store for later use */
 
 	/* Not 100% needed but useful,
@@ -1930,6 +1926,10 @@
 
 static void bpy_class_free(void *pyob_ptr)
 {
+	if(G.f&G_DEBUG) {
+		if(((PyObject *)pyob_ptr)->ob_refcnt > 1)
+			PyObSpit("zombie class - ref should be 1", (PyObject *)pyob_ptr);
+	}
 	Py_DECREF((PyObject *)pyob_ptr);
 }
 

Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_util.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_util.c	2009-05-28 01:57:29 UTC (rev 20459)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_util.c	2009-05-28 02:03:48 UTC (rev 20460)
@@ -166,6 +166,8 @@
 	}
 	else {
 		PyObject_Print(var, stderr, 0);
+		fprintf(stderr, " ref:%d ", var->ob_refcnt);
+		fprintf(stderr, " ptr:%ld", (long)var);
 	}
 	fprintf(stderr, "\n");
 }





More information about the Bf-blender-cvs mailing list