[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