[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57711] trunk/blender/source/blender/ blenkernel/intern/node.c: Making sure free_nodesystem only frees non-NULL data.

Daniel Stokes kupomail at gmail.com
Mon Jun 24 23:11:14 CEST 2013


Revision: 57711
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57711
Author:   kupoman
Date:     2013-06-24 21:11:13 +0000 (Mon, 24 Jun 2013)
Log Message:
-----------
Making sure free_nodesystem only frees non-NULL data. This helps address some problems in the BGE with loading multiple blendfiles.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/node.c

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2013-06-24 20:14:51 UTC (rev 57710)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2013-06-24 21:11:13 UTC (rev 57711)
@@ -3546,33 +3546,39 @@
 
 void free_nodesystem(void) 
 {
-	NODE_TYPES_BEGIN(nt)
-		if (nt->ext.free) {
-			nt->ext.free(nt->ext.data);
-		}
-	NODE_TYPES_END
-	
-	NODE_SOCKET_TYPES_BEGIN(st)
-		if (st->ext_socket.free)
-			st->ext_socket.free(st->ext_socket.data);
-		if (st->ext_interface.free)
-			st->ext_interface.free(st->ext_interface.data);
-	NODE_SOCKET_TYPES_END
-	
-	NODE_TREE_TYPES_BEGIN(nt)
-		if (nt->ext.free) {
-			nt->ext.free(nt->ext.data);
-		}
-	NODE_TREE_TYPES_END
-	
-	BLI_ghash_free(nodetypes_hash, NULL, node_free_type);
-	nodetypes_hash = NULL;
-	
-	BLI_ghash_free(nodesockettypes_hash, NULL, node_free_socket_type);
-	nodesockettypes_hash = NULL;
-	
-	BLI_ghash_free(nodetreetypes_hash, NULL, ntree_free_type);
-	nodetreetypes_hash = NULL;
+	if (nodetypes_hash) {
+		NODE_TYPES_BEGIN(nt)
+			if (nt->ext.free) {
+				nt->ext.free(nt->ext.data);
+			}
+		NODE_TYPES_END
+
+		BLI_ghash_free(nodetypes_hash, NULL, node_free_type);
+		nodetypes_hash = NULL;
+	}
+
+	if (nodesockettypes_hash) {
+		NODE_SOCKET_TYPES_BEGIN(st)
+			if (st->ext_socket.free)
+				st->ext_socket.free(st->ext_socket.data);
+			if (st->ext_interface.free)
+				st->ext_interface.free(st->ext_interface.data);
+		NODE_SOCKET_TYPES_END
+
+		BLI_ghash_free(nodesockettypes_hash, NULL, node_free_socket_type);
+		nodesockettypes_hash = NULL;
+	}
+
+	if (nodetreetypes_hash) {
+		NODE_TREE_TYPES_BEGIN(nt)
+			if (nt->ext.free) {
+				nt->ext.free(nt->ext.data);
+			}
+		NODE_TREE_TYPES_END
+
+		BLI_ghash_free(nodetreetypes_hash, NULL, ntree_free_type);
+		nodetreetypes_hash = NULL;
+	}
 }
 
 /* called from BKE_scene_unlink, when deleting a scene goes over all scenes




More information about the Bf-blender-cvs mailing list