[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30277] trunk/blender/source/blender: group refcount checking was inconsistent.

Campbell Barton ideasman42 at gmail.com
Tue Jul 13 18:53:18 CEST 2010


Revision: 30277
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30277
Author:   campbellbarton
Date:     2010-07-13 18:53:17 +0200 (Tue, 13 Jul 2010)

Log Message:
-----------
group refcount checking was inconsistent.
- if a group has one or more objects in it, it gets a refcount of 1 on load (unchanged from before)
- dupli-groups, and materials no longer add/remove a reference.
- now groups are only freed when they contain no objects or when manually unlinked.	

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/anim.c
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/object/object_edit.c
    trunk/blender/source/blender/editors/object/object_relations.c
    trunk/blender/source/blender/editors/space_outliner/outliner.c
    trunk/blender/source/blender/makesrna/intern/rna_main_api.c

Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c	2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c	2010-07-13 16:53:17 UTC (rev 30277)
@@ -741,7 +741,7 @@
 
 			if(go->ob->transflag & OB_DUPLI) {
 				copy_m4_m4(dob->ob->obmat, dob->mat);
-				object_duplilist_recursive((ID *)group, scene, go->ob, lb, ob->obmat, level+1, animated);
+				object_duplilist_recursive(&group->id, scene, go->ob, lb, ob->obmat, level+1, animated);
 				copy_m4_m4(dob->ob->obmat, dob->omat);
 			}
 		}

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2010-07-13 16:53:17 UTC (rev 30277)
@@ -210,7 +210,7 @@
 #if 0 // XXX old animation system
 	id_us_plus((ID *)man->ipo);
 #endif // XXX old animation system
-	id_us_plus((ID *)man->group);
+	id_lib_extern((ID *)man->group);
 	
 	for(a=0; a<MAX_MTEX; a++) {
 		if(ma->mtex[a]) {

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2010-07-13 16:53:17 UTC (rev 30277)
@@ -283,7 +283,6 @@
 	ob->path= 0;
 	if(ob->adt) BKE_free_animdata((ID *)ob);
 	if(ob->poselib) ob->poselib->id.us--;
-	if(ob->dup_group) ob->dup_group->id.us--;
 	if(ob->gpd) ob->gpd->id.us--;
 	if(ob->defbase.first)
 		BLI_freelistN(&ob->defbase);
@@ -1320,7 +1319,7 @@
 
 	/* increase user numbers */
 	id_us_plus((ID *)obn->data);
-	id_us_plus((ID *)obn->dup_group);
+	id_lib_extern((ID *)obn->dup_group);
 	
 
 	for(a=0; a<obn->totcol; a++) id_us_plus((ID *)obn->mat[a]);

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/editors/object/object_add.c	2010-07-13 16:53:17 UTC (rev 30277)
@@ -754,9 +754,8 @@
 		rename_id(&ob->id, group->id.name+2);
 		ob->dup_group= group;
 		ob->transflag |= OB_DUPLIGROUP;
-		id_us_plus(&group->id);
+		id_lib_extern(&group->id);
 
-
 		WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
 
 		return OPERATOR_FINISHED;

Modified: trunk/blender/source/blender/editors/object/object_edit.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_edit.c	2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/editors/object/object_edit.c	2010-07-13 16:53:17 UTC (rev 30277)
@@ -1408,7 +1408,7 @@
 
 					base->object->dup_group= ob->dup_group;
 					if(ob->dup_group)
-						id_us_plus((ID *)ob->dup_group);
+						id_lib_extern(&ob->dup_group->id);
 				}
 				else if(event==7) {	/* mass */
 					base->object->mass= ob->mass;

Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c	2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/editors/object/object_relations.c	2010-07-13 16:53:17 UTC (rev 30277)
@@ -1250,10 +1250,9 @@
 					BKE_copy_animdata_id((ID *)obt->data, (ID *)ob->data);
 					break;
 				case MAKE_LINKS_DUPLIGROUP:
-					if(ob->dup_group) ob->dup_group->id.us--;
 					obt->dup_group= ob->dup_group;
 					if(obt->dup_group) {
-						id_us_plus((ID *)obt->dup_group);
+						id_lib_extern(&obt->dup_group->id);
 						obt->transflag |= OB_DUPLIGROUP;
 					}
 					break;

Modified: trunk/blender/source/blender/editors/space_outliner/outliner.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner.c	2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/editors/space_outliner/outliner.c	2010-07-13 16:53:17 UTC (rev 30277)
@@ -1411,7 +1411,7 @@
 		GroupObject *go;
 		
 		for(group= mainvar->group.first; group; group= group->id.next) {
-			if(group->id.us) {
+			if(group->gobject.first) {
 				te= outliner_add_element(soops, &soops->tree, group, NULL, 0, 0);
 				tselem= TREESTORE(te);
 				
@@ -3124,7 +3124,6 @@
 		if( GS(tsep->id->name)==ID_OB) {
 			Object *ob= (Object *)tsep->id;
 			ob->dup_group= NULL;
-			group->id.us--;
 		}
 	}
 	else {

Modified: trunk/blender/source/blender/makesrna/intern/rna_main_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_main_api.c	2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/makesrna/intern/rna_main_api.c	2010-07-13 16:53:17 UTC (rev 30277)
@@ -397,7 +397,6 @@
 void rna_Main_groups_remove(Main *bmain, ReportList *reports, Group *group)
 {
 	unlink_group(group);
-	group->id.us= 0;
 	free_libblock(&bmain->group, group);
 	/* XXX python now has invalid pointer? */
 }





More information about the Bf-blender-cvs mailing list