minor ref-counting changes, means new subclasses will get the correct ref count thoug...
authorCampbell Barton <ideasman42@gmail.com>
Tue, 26 May 2009 06:29:15 +0000 (06:29 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 26 May 2009 06:29:15 +0000 (06:29 +0000)
Found that subclassing an RNA struct (without even registering or instancing adds a reference to Py_None).
Unlikely a python bug, tested with py2.6 and 3.1

source/blender/python/intern/bpy_rna.c

index 7b4d5a2d8ef30108caace7ebfeb2d030a2a91088..ded39482bc723b1d9b1e35720b687c73f53d2278 100644 (file)
@@ -1364,7 +1364,18 @@ static void pyrna_subtype_set_rna(PyObject *newclass, StructRNA *srna)
 {
        PointerRNA ptr;
        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
+       
        RNA_struct_py_type_set(srna, (void *)newclass); /* Store for later use */
 
        /* Not 100% needed but useful,
@@ -1982,8 +1993,7 @@ PyObject *pyrna_basetype_register(PyObject *self, PyObject *args)
 
        BKE_reports_clear(&reports);
 
-       pyrna_subtype_set_rna(py_class, srna);
-       Py_INCREF(py_class);
+       pyrna_subtype_set_rna(py_class, srna); /* takes a ref to py_class */
 
        Py_RETURN_NONE;
 }