[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24719] trunk/blender/source/blender: id properties for editbones and pose channels were not being freed in a number of cases ,

Campbell Barton ideasman42 at gmail.com
Sat Nov 21 12:26:10 CET 2009


Revision: 24719
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24719
Author:   campbellbarton
Date:     2009-11-21 12:26:09 +0100 (Sat, 21 Nov 2009)

Log Message:
-----------
id properties for editbones and pose channels were not being freed in a number of cases,
added free_pose_channel(pchan) and use this in all places that free pose bones

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_action.h
    trunk/blender/source/blender/blenkernel/intern/action.c
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/editors/armature/editarmature.c

Modified: trunk/blender/source/blender/blenkernel/BKE_action.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_action.h	2009-11-21 00:05:43 UTC (rev 24718)
+++ trunk/blender/source/blender/blenkernel/BKE_action.h	2009-11-21 11:26:09 UTC (rev 24719)
@@ -118,6 +118,12 @@
 /* Pose API ----------------- */	
 	
 /**
+ * Deallocates a pose channel.
+ * Does not free the pose channel itself.
+ */
+void free_pose_channel(struct bPoseChannel *pchan);
+
+/**
  * Removes and deallocates all channels from a pose.
  * Does not free the pose itself.
  */

Modified: trunk/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/action.c	2009-11-21 00:05:43 UTC (rev 24718)
+++ trunk/blender/source/blender/blenkernel/intern/action.c	2009-11-21 11:26:09 UTC (rev 24719)
@@ -62,6 +62,8 @@
 #include "BKE_main.h"
 #include "BKE_object.h"
 #include "BKE_utildefines.h"
+#include "BKE_idprop.h"
+
 #include "BIK_api.h"
 
 #include "BLI_math.h"
@@ -564,16 +566,27 @@
 	}
 }
 
+void free_pose_channel(bPoseChannel *pchan)
+{
+	if (pchan->path)
+		MEM_freeN(pchan->path);
+
+	free_constraints(&pchan->constraints);
+
+	if(pchan->prop) {
+		IDP_FreeProperty(pchan->prop);
+		MEM_freeN(pchan->prop);
+	}
+}
+
 void free_pose_channels(bPose *pose) 
 {
 	bPoseChannel *pchan;
 	
 	if (pose->chanbase.first) {
-		for (pchan = pose->chanbase.first; pchan; pchan=pchan->next){
-			if (pchan->path)
-				MEM_freeN(pchan->path);
-			free_constraints(&pchan->constraints);
-		}
+		for (pchan = pose->chanbase.first; pchan; pchan=pchan->next)
+			free_pose_channel(pchan);
+
 		BLI_freelistN(&pose->chanbase);
 	}
 }

Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c	2009-11-21 00:05:43 UTC (rev 24718)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c	2009-11-21 11:26:09 UTC (rev 24719)
@@ -1530,8 +1530,7 @@
 			}
 			
 			/* free stuff from current channel */
-			if (pchan->path) MEM_freeN(pchan->path);
-			free_constraints(&pchan->constraints);
+			free_pose_channel(pchan);
 			
 			/* the final copy */
 			*pchan= pchanw;
@@ -1586,9 +1585,7 @@
 	for(pchan= pose->chanbase.first; pchan; pchan= next) {
 		next= pchan->next;
 		if(pchan->bone==NULL) {
-			if(pchan->path)
-				MEM_freeN(pchan->path);
-			free_constraints(&pchan->constraints);
+			free_pose_channel(pchan);
 			BLI_freelinkN(&pose->chanbase, pchan);
 		}
 	}

Modified: trunk/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature.c	2009-11-21 00:05:43 UTC (rev 24718)
+++ trunk/blender/source/blender/editors/armature/editarmature.c	2009-11-21 11:26:09 UTC (rev 24719)
@@ -144,6 +144,11 @@
 	if(arm->act_edbone==bone)
 		arm->act_edbone= NULL;
 
+	if(bone->prop) {
+		IDP_FreeProperty(bone->prop);
+		MEM_freeN(bone->prop);
+	}
+
 	BLI_freelinkN(arm->edbo, bone);
 }
 
@@ -1025,8 +1030,7 @@
 			}
 			
 			/* free any of the extra-data this pchan might have */
-			if (pchan->path) MEM_freeN(pchan->path);
-			free_constraints(&pchan->constraints);
+			free_pose_channel(pchan);
 			
 			/* get rid of unneeded bone */
 			free_edit_bone(arm, curbone);
@@ -1733,17 +1737,17 @@
 	
 	/*  First erase any associated pose channel */
 	if (obedit->pose) {
-		bPoseChannel *chan, *next;
-		for (chan=obedit->pose->chanbase.first; chan; chan=next) {
-			next= chan->next;
-			curBone = editbone_name_exists(arm->edbo, chan->name);
+		bPoseChannel *pchan, *next;
+		for (pchan=obedit->pose->chanbase.first; pchan; pchan=next) {
+			next= pchan->next;
+			curBone = editbone_name_exists(arm->edbo, pchan->name);
 			
 			if (curBone && (curBone->flag & BONE_SELECTED) && (arm->layer & curBone->layer)) {
-				free_constraints(&chan->constraints);
-				BLI_freelinkN (&obedit->pose->chanbase, chan);
+				free_pose_channel(pchan);
+				BLI_freelinkN (&obedit->pose->chanbase, pchan);
 			}
 			else {
-				for (con= chan->constraints.first; con; con= con->next) {
+				for (con= pchan->constraints.first; con; con= con->next) {
 					bConstraintTypeInfo *cti= constraint_get_typeinfo(con);
 					ListBase targets = {NULL, NULL};
 					bConstraintTarget *ct;
@@ -2522,12 +2526,12 @@
 	 * they point to has also been duplicated
 	 */
 	EditBone     *oldtarget, *newtarget;
-	bPoseChannel *chan;
+	bPoseChannel *pchan;
 	bConstraint  *curcon;
 	ListBase     *conlist;
 	
-	if ( (chan = verify_pose_channel(dst_ob->pose, dupBone->name)) ) {
-		if ( (conlist = &chan->constraints) ) {
+	if ( (pchan = verify_pose_channel(dst_ob->pose, dupBone->name)) ) {
+		if ( (conlist = &pchan->constraints) ) {
 			for (curcon = conlist->first; curcon; curcon=curcon->next) {
 				/* does this constraint have a subtarget in
 				 * this armature?





More information about the Bf-blender-cvs mailing list