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

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to