[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56526] trunk/blender/source/blender: Fix #35122: Blenderplayer crashes when loading level

Sergey Sharybin sergey.vfx at gmail.com
Tue May 7 17:28:43 CEST 2013


Revision: 56526
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56526
Author:   nazgul
Date:     2013-05-07 15:28:42 +0000 (Tue, 07 May 2013)
Log Message:
-----------
Fix #35122: Blenderplayer crashes when loading level

Issue was caused by ntreeUpdateTree calling for a ntree
which is not in G.main.

This lead to issues in ntreeVerifyNodes (which is called
from ntreeUpdateTree).

Made is so ntreeUpdateTree now accepts main as an argument.
Will work for the release, later we could either solve the
TODO mentioned in ntreeUpdateTree which will eliminate need
in main there or make it so context's main is used from all
over where ntreeUpdateTree is called (currently there're
still some usages of G.main).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/space_node/node_add.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/editors/space_node/node_group.c
    trunk/blender/source/blender/editors/space_node/node_relationships.c
    trunk/blender/source/blender/editors/space_node/node_templates.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/nodes/intern/node_exec.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2013-05-07 09:57:48 UTC (rev 56525)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2013-05-07 15:28:42 UTC (rev 56526)
@@ -358,7 +358,7 @@
 
 void              ntreeMakeLocal(struct bNodeTree *ntree);
 int               ntreeHasType(struct bNodeTree *ntree, int type);
-void              ntreeUpdateTree(struct bNodeTree *ntree);
+void              ntreeUpdateTree(struct Main *main, struct bNodeTree *ntree);
 /* XXX Currently each tree update call does call to ntreeVerifyNodes too.
  * Some day this should be replaced by a decent depsgraph automatism!
  */

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2013-05-07 09:57:48 UTC (rev 56525)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2013-05-07 15:28:42 UTC (rev 56526)
@@ -2848,7 +2848,7 @@
 	} FOREACH_NODETREE_END
 }
 
-void ntreeUpdateTree(bNodeTree *ntree)
+void ntreeUpdateTree(Main *bmain, bNodeTree *ntree)
 {
 	bNode *node;
 	
@@ -2886,8 +2886,8 @@
 		ntreeInterfaceTypeUpdate(ntree);
 	
 	/* XXX hack, should be done by depsgraph!! */
-	if (G.main)
-		ntreeVerifyNodes(G.main, &ntree->id);
+	if (bmain)
+		ntreeVerifyNodes(bmain, &ntree->id);
 	
 	if (ntree->update & (NTREE_UPDATE_LINKS | NTREE_UPDATE_NODES)) {
 		/* node updates can change sockets or links, repeat link pointer update afterward */

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2013-05-07 09:57:48 UTC (rev 56525)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2013-05-07 15:28:42 UTC (rev 56526)
@@ -2579,7 +2579,7 @@
 	{
 		FOREACH_NODETREE(main, ntree, id) {
 			/* make an update call for the tree */
-			ntreeUpdateTree(ntree);
+			ntreeUpdateTree(main, ntree);
 		} FOREACH_NODETREE_END
 	}
 }

Modified: trunk/blender/source/blender/editors/space_node/node_add.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_add.c	2013-05-07 09:57:48 UTC (rev 56525)
+++ trunk/blender/source/blender/editors/space_node/node_add.c	2013-05-07 15:28:42 UTC (rev 56526)
@@ -93,7 +93,7 @@
 	node->locx = locx;
 	node->locy = locy + 60.0f;
 	
-	ntreeUpdateTree(snode->edittree);
+	ntreeUpdateTree(bmain, snode->edittree);
 	ED_node_set_active(bmain, snode->edittree, node);
 	
 	if (snode->nodetree->type == NTREE_COMPOSIT) {
@@ -285,7 +285,7 @@
 		BLI_freelistN(&input_links);
 		
 		/* always last */
-		ntreeUpdateTree(ntree);
+		ntreeUpdateTree(CTX_data_main(C), ntree);
 		snode_notify(C, snode);
 		snode_dag_update(C, snode);
 		

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2013-05-07 09:57:48 UTC (rev 56525)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2013-05-07 15:28:42 UTC (rev 56526)
@@ -474,7 +474,7 @@
 		}
 	}
 	
-	ntreeUpdateTree(ntree);
+	ntreeUpdateTree(CTX_data_main(C), ntree);
 }
 
 /* assumes nothing being done in ntree yet, sets the default in/out node */
@@ -513,7 +513,7 @@
 	tosock = out->inputs.first;
 	nodeAddLink(sce->nodetree, in, fromsock, out, tosock);
 	
-	ntreeUpdateTree(sce->nodetree);
+	ntreeUpdateTree(CTX_data_main(C), sce->nodetree);
 	
 	// XXX ntreeCompositForceHidden(sce->nodetree);
 }
@@ -545,7 +545,7 @@
 	tosock = out->inputs.first;
 	nodeAddLink(tx->nodetree, in, fromsock, out, tosock);
 	
-	ntreeUpdateTree(tx->nodetree);
+	ntreeUpdateTree(CTX_data_main(C), tx->nodetree);
 }
 
 /* Here we set the active tree(s), even called for each redraw now, so keep it fast :) */
@@ -1222,7 +1222,7 @@
 			break;
 	}
 	
-	ntreeUpdateTree(snode->edittree);
+	ntreeUpdateTree(CTX_data_main(C), snode->edittree);
 	
 	snode_notify(C, snode);
 	snode_dag_update(C, snode);
@@ -1557,7 +1557,7 @@
 		}
 	}
 
-	ntreeUpdateTree(snode->edittree);
+	ntreeUpdateTree(CTX_data_main(C), snode->edittree);
 
 	WM_event_add_notifier(C, NC_NODE | ND_DISPLAY, NULL);
 
@@ -1636,7 +1636,7 @@
 		}
 	}
 	
-	ntreeUpdateTree(snode->edittree);
+	ntreeUpdateTree(CTX_data_main(C), snode->edittree);
 
 	snode_notify(C, snode);
 	snode_dag_update(C, snode);
@@ -1679,7 +1679,7 @@
 		}
 	}
 
-	ntreeUpdateTree(snode->edittree);
+	ntreeUpdateTree(CTX_data_main(C), snode->edittree);
 
 	snode_notify(C, snode);
 	snode_dag_update(C, snode);
@@ -2071,7 +2071,7 @@
 		            link->tonode->new_node, link->tosock->new_sock);
 	}
 
-	ntreeUpdateTree(snode->edittree);
+	ntreeUpdateTree(CTX_data_main(C), snode->edittree);
 
 	snode_notify(C, snode);
 	snode_dag_update(C, snode);
@@ -2156,7 +2156,7 @@
 	/* make the new socket active */
 	sock->flag |= SELECT;
 	
-	ntreeUpdateTree(ntree);
+	ntreeUpdateTree(CTX_data_main(C), ntree);
 
 	WM_event_add_notifier(C, NC_NODE | ND_DISPLAY, NULL);
 	
@@ -2202,7 +2202,7 @@
 	if (active_sock)
 		active_sock->flag |= SELECT;
 	
-	ntreeUpdateTree(ntree);
+	ntreeUpdateTree(CTX_data_main(C), ntree);
 
 	WM_event_add_notifier(C, NC_NODE | ND_DISPLAY, NULL);
 	
@@ -2270,7 +2270,7 @@
 	}
 	}
 	
-	ntreeUpdateTree(ntree);
+	ntreeUpdateTree(CTX_data_main(C), ntree);
 
 	WM_event_add_notifier(C, NC_NODE | ND_DISPLAY, NULL);
 	

Modified: trunk/blender/source/blender/editors/space_node/node_group.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_group.c	2013-05-07 09:57:48 UTC (rev 56525)
+++ trunk/blender/source/blender/editors/space_node/node_group.c	2013-05-07 15:28:42 UTC (rev 56526)
@@ -363,7 +363,7 @@
 		return OPERATOR_CANCELLED;
 	
 	if (gnode->id && node_group_ungroup(snode->edittree, gnode)) {
-		ntreeUpdateTree(snode->nodetree);
+		ntreeUpdateTree(CTX_data_main(C), snode->nodetree);
 	}
 	else {
 		BKE_report(op->reports, RPT_WARNING, "Cannot ungroup");
@@ -556,7 +556,7 @@
 	/* switch to parent tree */
 	ED_node_tree_pop(snode);
 	
-	ntreeUpdateTree(snode->nodetree);
+	ntreeUpdateTree(CTX_data_main(C), snode->nodetree);
 	
 	snode_notify(C, snode);
 	snode_dag_update(C, snode);
@@ -917,6 +917,7 @@
 	const char *node_idname = group_node_idname(C);
 	bNodeTree *ngroup;
 	bNode *gnode;
+	Main *bmain = CTX_data_main(C);
 	
 	ED_preview_kill_jobs(C);
 	
@@ -931,11 +932,11 @@
 		nodeSetActive(ntree, gnode);
 		if (ngroup) {
 			ED_node_tree_push(snode, ngroup, gnode);
-			ntreeUpdateTree(ngroup);
+			ntreeUpdateTree(bmain, ngroup);
 		}
 	}
 	
-	ntreeUpdateTree(ntree);
+	ntreeUpdateTree(bmain, ntree);
 
 	snode_notify(C, snode);
 	snode_dag_update(C, snode);
@@ -967,6 +968,7 @@
 	bNodeTree *ngroup;
 	const char *node_idname = group_node_idname(C);
 	bNode *gnode;
+	Main *bmain = CTX_data_main(C);
 	
 	ED_preview_kill_jobs(C);
 	
@@ -983,9 +985,9 @@
 	
 	nodeSetActive(ntree, gnode);
 	ED_node_tree_push(snode, ngroup, gnode);
-	ntreeUpdateTree(ngroup);
+	ntreeUpdateTree(bmain, ngroup);
 	
-	ntreeUpdateTree(ntree);
+	ntreeUpdateTree(bmain, ntree);
 	
 	snode_notify(C, snode);
 	snode_dag_update(C, snode);

Modified: trunk/blender/source/blender/editors/space_node/node_relationships.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_relationships.c	2013-05-07 09:57:48 UTC (rev 56525)
+++ trunk/blender/source/blender/editors/space_node/node_relationships.c	2013-05-07 15:28:42 UTC (rev 56526)
@@ -38,6 +38,7 @@
 #include "BLI_blenlib.h"
 
 #include "BKE_context.h"
+#include "BKE_global.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
 
@@ -173,7 +174,7 @@
 
 	link = nodeAddLink(ntree, node_fr, sock_fr, node_to, sock_to);
 	/* validate the new link */
-	ntreeUpdateTree(ntree);
+	ntreeUpdateTree(G.main, ntree);
 	if (!(link->flag & NODE_LINK_VALID)) {
 		nodeRemLink(ntree, link);
 		return 0;
@@ -256,7 +257,7 @@
 	}
 
 	if (numlinks > 0) {
-		ntreeUpdateTree(ntree);
+		ntreeUpdateTree(G.main, ntree);
 	}
 
 	BLI_freelistN(nodelist);
@@ -347,7 +348,7 @@
 			/* make sure the dependency sorting is updated */
 			snode->edittree->update |= NTREE_UPDATE_LINKS;
 		}
-		ntreeUpdateTree(snode->edittree);
+		ntreeUpdateTree(CTX_data_main(C), snode->edittree);
 		snode_update(snode, node);
 	}
 
@@ -532,7 +533,7 @@
 					nodeRemLink(ntree, link);
 			}
 			
-			ntreeUpdateTree(ntree);
+			ntreeUpdateTree(CTX_data_main(C), ntree);
 			snode_notify(C, snode);
 			snode_dag_update(C, snode);
 			
@@ -714,7 +715,7 @@
 	node_deselect_all_input_sockets(snode, 0);
 	node_deselect_all_output_sockets(snode, 0);
 
-	ntreeUpdateTree(snode->edittree);
+	ntreeUpdateTree(CTX_data_main(C), snode->edittree);
 	snode_notify(C, snode);
 	snode_dag_update(C, snode);
 
@@ -797,7 +798,7 @@
 		}
 
 		if (found) {
-			ntreeUpdateTree(snode->edittree);
+			ntreeUpdateTree(CTX_data_main(C), snode->edittree);
 			snode_notify(C, snode);
 			snode_dag_update(C, snode);
 
@@ -852,7 +853,7 @@
 		}
 	}
 
-	ntreeUpdateTree(ntree);
+	ntreeUpdateTree(CTX_data_main(C), ntree);
 
 	snode_notify(C, snode);
 	snode_dag_update(C, snode);
@@ -881,7 +882,7 @@
 	SpaceNode *snode = CTX_wm_space_node(C);
 
 	/* this is just a wrapper around this call... */
-	ntreeUpdateTree(snode->nodetree);
+	ntreeUpdateTree(CTX_data_main(C), snode->nodetree);
 	snode_notify(C, snode);
 
 	return OPERATOR_FINISHED;
@@ -1361,7 +1362,7 @@
 			
 			nodeAddLink(snode->edittree, select, best_output, node, sockto);
 			
-			ntreeUpdateTree(snode->edittree);   /* needed for pointers */
+			ntreeUpdateTree(G.main, snode->edittree);   /* needed for pointers */
 			snode_update(snode, select);
 			ED_node_tag_update_id(snode->id);
 		}

Modified: trunk/blender/source/blender/editors/space_node/node_templates.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_templates.c	2013-05-07 09:57:48 UTC (rev 56525)
+++ trunk/blender/source/blender/editors/space_node/node_templates.c	2013-05-07 15:28:42 UTC (rev 56526)
@@ -38,6 +38,7 @@
 #include "BLF_translation.h"
 
 #include "BKE_context.h"
+#include "BKE_global.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
 #include "BKE_scene.h"
@@ -85,7 +86,7 @@
 {
 	if (node->type == NODE_GROUP) {
 		node->id = (ID *)item->ngroup;
-		ntreeUpdateTree(item->ngroup);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list