[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13539] branches/pynodes/source/blender: = = Pynodes ==

Willian Padovani Germano wpgermano at gmail.com
Sun Feb 3 15:39:20 CET 2008


Revision: 13539
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13539
Author:   ianwill
Date:     2008-02-03 15:39:18 +0100 (Sun, 03 Feb 2008)

Log Message:
-----------
== Pynodes ==

Ongoing work: fixing a crash with undo/redo (corrupt memory, usually crashed after second undo).

Modified Paths:
--------------
    branches/pynodes/source/blender/blenkernel/intern/node.c
    branches/pynodes/source/blender/blenloader/intern/readfile.c
    branches/pynodes/source/blender/blenloader/intern/writefile.c
    branches/pynodes/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c

Modified: branches/pynodes/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/pynodes/source/blender/blenkernel/intern/node.c	2008-02-03 07:43:00 UTC (rev 13538)
+++ branches/pynodes/source/blender/blenkernel/intern/node.c	2008-02-03 14:39:18 UTC (rev 13539)
@@ -2536,7 +2536,7 @@
 
 void reinit_nodesystem(void)
 {
-	remove_dynamic_typeinfos(&node_all_composit);
-	remove_dynamic_typeinfos(&node_all_shaders);
+	/*remove_dynamic_typeinfos(&node_all_composit);*/ /* unused for now */
+	/*remove_dynamic_typeinfos(&node_all_shaders);*//*crash on undo/redo*/
 }
 

Modified: branches/pynodes/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/pynodes/source/blender/blenloader/intern/readfile.c	2008-02-03 07:43:00 UTC (rev 13538)
+++ branches/pynodes/source/blender/blenloader/intern/readfile.c	2008-02-03 14:39:18 UTC (rev 13539)
@@ -1458,9 +1458,10 @@
 	Material *ma;
 	bNodeTree *ntree;
 
+	/* this crashes blender on undo/redo
 	if(open==1) {
 		reinit_nodesystem();
-	}
+	}*/
 	
 	/* now create the own typeinfo structs an verify nodes */
 	/* here we still assume no groups in groups */

Modified: branches/pynodes/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/pynodes/source/blender/blenloader/intern/writefile.c	2008-02-03 07:43:00 UTC (rev 13538)
+++ branches/pynodes/source/blender/blenloader/intern/writefile.c	2008-02-03 14:39:18 UTC (rev 13539)
@@ -450,7 +450,7 @@
 		writestruct(wd, DATA, "bNode", 1, node);
 
 	for(node= ntree->nodes.first; node; node= node->next) {
-		if(node->storage && node->type!=NODE_DYNAMIC) { /* 4PYNODES */
+		if(node->storage && node->type!=NODE_DYNAMIC) {
 			/* could be handlerized at some point, now only 1 exception still */
 			if(ntree->type==NTREE_SHADER && (node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB))
 				write_curvemapping(wd, node->storage);

Modified: branches/pynodes/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c
===================================================================
--- branches/pynodes/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c	2008-02-03 07:43:00 UTC (rev 13538)
+++ branches/pynodes/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c	2008-02-03 14:39:18 UTC (rev 13539)
@@ -73,10 +73,9 @@
 	return ntype; /* NULL if doesn't exist */
 }
 
-static void node_dynamic_free_typeinfo_sockets(bNode *node)
+static void node_dynamic_free_typeinfo_sockets(bNodeType *tinfo)
 {
 	bNodeSocketType *sock;
-	bNodeType *tinfo = node->typeinfo;
 
 	if (!tinfo) return;
 
@@ -100,24 +99,18 @@
 	}
 }
 
-static void node_dynamic_free_typeinfo(bNode *node)
+static void node_dynamic_free_typeinfo(bNodeType *tinfo)
 {
-	bNodeType *tinfo = node->typeinfo;
-
 	if (!tinfo) return;
 
-	if (node->typeinfo->id)
-		BLI_remlink(&node_all_shaders, tinfo);/*XXX hardcoded for shaders*/
+	node_dynamic_free_typeinfo_sockets(tinfo);
 
-	node_dynamic_free_typeinfo_sockets(node);
-
 	if (tinfo->name) { MEM_freeN(tinfo->name); }
 
-	if (tinfo->pynode) { Py_DECREF((PyObject *)tinfo->pynode); }
-	if (tinfo->pydict) { Py_DECREF((PyObject *)tinfo->pydict); }
+	//wif (tinfo->pynode) { Py_DECREF((PyObject *)tinfo->pynode); }
+	//wif (tinfo->pydict) { Py_DECREF((PyObject *)tinfo->pydict); }
 
 	MEM_freeN(tinfo);
-	node->typeinfo = NULL;
 }
 
 static void node_dynamic_free_sockets(bNode *node)
@@ -187,11 +180,19 @@
  * the file is opened. */
 static void node_dynamic_reset(bNode *node, bNodeTree *ntree)
 {
-	node_dynamic_free_typeinfo_sockets(node);
+	bNodeType *tinfo = node->typeinfo;
+
+	node_dynamic_free_typeinfo_sockets(tinfo);
+
 	if (!ntree) { node_dynamic_free_sockets(node); }
+
 	node_dynamic_update_socket_links(node, ntree);
 	node_dynamic_free_storage_cb(node);
-	node_dynamic_free_typeinfo(node);
+
+	/* XXX hardcoded for shaders: */
+	if (node->typeinfo->id) { BLI_remlink(&node_all_shaders, tinfo); }
+
+	node_dynamic_free_typeinfo(tinfo);
 	node->typeinfo =
 			node_dynamic_find_typeinfo(&node_all_shaders, NULL);
 }
@@ -254,22 +255,25 @@
 
 			if (testinst && PyObject_TypeCheck(testinst, &Node_Type)==1) {
 				InitNode((BPy_Node *)(testinst), node);
-				Py_INCREF(testinst);
+				Py_INCREF(testinst); /* XXX uneeded, right? */
 				nsd->node = testinst;
 				node->typeinfo->execfunc = node_dynamic_exec_cb;
 				is_valid_script = 1;
 
 				/* for NEW, LOADED, REPARSE */
 				if (BNTST(node->custom1, NODE_DYNAMIC_ADDEXIST)) {
-					Py_INCREF(dict);
+					//wPy_INCREF(dict);
 					node->typeinfo->pydict = dict;
-					Py_INCREF(testinst);
+					//wPy_INCREF(testinst);
 					node->typeinfo->pynode = testinst;
 					node->typeinfo->id = node->id;
 					nodeAddSockets(node, node->typeinfo);
 					if (BNTST(node->custom1, NODE_DYNAMIC_REPARSE)) {
 						nodeRegisterType(&node_all_shaders, node->typeinfo);
-						MEM_freeN(node->typeinfo); /* nodeRegisterType copied it to a new one */
+						/* nodeRegisterType copied it to a new one, so we
+						 * free the typeinfo itself, but not what it
+						 * points to: */
+						MEM_freeN(node->typeinfo);
 						node->typeinfo = node_dynamic_find_typeinfo(&node_all_shaders, node->id);
 						MEM_freeN(node->typeinfo->name);
 						node->typeinfo->name = BLI_strdup(node->name);
@@ -332,7 +336,7 @@
 			nodeMakeDynamicType(node);
 			node->custom1 = BCLR(node->custom1, NODE_DYNAMIC_REPARSE);
 		} else {
-			node_dynamic_free_typeinfo_sockets(node);
+			node_dynamic_free_typeinfo_sockets(node->typeinfo);
 			node_dynamic_update_socket_links(node, NULL);
 			node_dynamic_free_storage_cb(node);
 		}





More information about the Bf-blender-cvs mailing list