[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35211] trunk/blender/source/gameengine/ Ketsji/KX_PythonSeq.cpp: cyclic gc support for KX_PythonSeq

Campbell Barton ideasman42 at gmail.com
Sun Feb 27 04:59:18 CET 2011


Revision: 35211
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35211
Author:   campbellbarton
Date:     2011-02-27 03:59:17 +0000 (Sun, 27 Feb 2011)
Log Message:
-----------
cyclic gc support for KX_PythonSeq

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_PythonSeq.cpp

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonSeq.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonSeq.cpp	2011-02-27 02:08:32 UTC (rev 35210)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonSeq.cpp	2011-02-27 03:59:17 UTC (rev 35211)
@@ -45,20 +45,32 @@
 
 PyObject *KX_PythonSeq_CreatePyObject( PyObject *base, short type )
 {
-	KX_PythonSeq *seq = PyObject_NEW( KX_PythonSeq, &KX_PythonSeq_Type);
+	KX_PythonSeq *seq = PyObject_GC_New(KX_PythonSeq, &KX_PythonSeq_Type);
 	seq->base = base;
 	Py_INCREF(base); /* so we can always access to check if its valid */
 	seq->type = type;
 	seq->iter = -1; /* init */
 	return (PyObject *)seq;
- }
- 
- static void KX_PythonSeq_dealloc( KX_PythonSeq * self )
+}
+
+static int KX_PythonSeq_traverse(KX_PythonSeq *self, visitproc visit, void *arg)
 {
-	Py_DECREF(self->base);
-	PyObject_DEL( self );
+	Py_VISIT(self->base);
+	return 0;
 }
 
+static int KX_PythonSeq_clear(KX_PythonSeq *self)
+{
+	Py_CLEAR(self->base);
+	return 0;
+}
+
+static void KX_PythonSeq_dealloc(KX_PythonSeq * self)
+{
+	KX_PythonSeq_clear(self);
+	PyObject_GC_Del(self);
+}
+
 static Py_ssize_t KX_PythonSeq_len( PyObject * self )
 {
 	PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base);
@@ -470,15 +482,15 @@
 	NULL,                       /* PyBufferProcs *tp_as_buffer; */
 
   /*** Flags to define presence of optional/expanded features ***/
-	Py_TPFLAGS_DEFAULT,         /* long tp_flags; */
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* long tp_flags; */
 
 	NULL,                       /*  char *tp_doc;  Documentation string */
   /*** Assigned meaning in release 2.0 ***/
 	/* call function for all accessible objects */
-	NULL,						/* traverseproc tp_traverse; */
+	(traverseproc)KX_PythonSeq_traverse,	/* traverseproc tp_traverse; */
 
 	/* delete references to contained objects */
-	NULL,                       /* inquiry tp_clear; */
+	(inquiry)KX_PythonSeq_clear,	/* inquiry tp_clear; */
 
   /***  Assigned meaning in release 2.1 ***/
   /*** rich comparisons ***/




More information about the Bf-blender-cvs mailing list